You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,有可能被意外关闭:

    1. 打开对应的Xib/Storyboard,选中FaceView
    2. 在右侧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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:23:55