Swift 4.0中如何以编程方式调用GestureRecognizer方法?
解决PinchGesture完全不生效的问题
你遇到的捏合手势连断点都触发不了的情况,大概率是方法匹配错误或者视图交互设置异常导致的,我帮你梳理几个核心排查方向:
检查Selector与方法签名的一致性
你贴出的FaceView里的方法写了@objc func changeScale(_ recognize,这里明显没写完,正确的方法签名必须完整匹配selector的要求:@objc func changeScale(_ recognizer: UIPinchGestureRecognizer) { // 你的缩放逻辑代码 }Swift的Selector对方法的参数类型、数量要求非常严格,只要有一点不匹配,系统就找不到对应的方法,自然不会触发任何回调。
确认FaceView的交互功能处于开启状态
虽然UIView默认isUserInteractionEnabled是true,但如果是从Storyboard/Xib拖出来的自定义View,有可能被意外关闭:- 打开对应的Xib/Storyboard,选中FaceView
- 在右侧Attributes Inspector面板里,找到User Interaction Enabled选项,确保它是勾选状态
也可以在代码里手动强制开启:
faceView.isUserInteractionEnabled = true排查手势添加后的视图重置操作
你在IBOutlet的didSet里添加手势,这个时机本身是没问题的,但要检查updateUI()方法里有没有做重置FaceView实例或者移除所有手势的操作——如果updateUI()里重新创建了FaceView,那之前添加的捏合手势就会被丢弃。验证手势是否真的被添加到视图上
可以在添加手势后加一行打印代码,确认捏合手势已经成功加入到视图的手势列表里:faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(FaceView.changeScale(_:)))) print(faceView.gestureRecognizers ?? []) // 查看输出里是否有UIPinchGestureRecognizer的实例
内容的提问来源于stack exchange,提问作者JBarros35
相关产品推荐
相关产品推荐

