ios - 从重叠 View 触发 UITapGestureRecognizers

标签 ios swift uiview uitapgesturerecognizer

我有一个主视图和主视图的 4 个 subview ,它们都有自己的 UITapGestureRecognizer,当我点击一个 subview 时,如何触发两个 View 。下面的例子,

view hierarchy

如果我点击 subview 1 所需的日志将是:

subview1 is clicked
MainView is clicked

我的代码

override func viewDidLoad() {

    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let mainGesture = UITapGestureRecognizer(target: self, action: #selector(mainGestureActivated))

    self.view.addGestureRecognizer(mainGesture)

    let subGesture = UITapGestureRecognizer(target: self, action: #selector(subViewGestureActivated))

    self.subview1.addGestureRecognizer(subGesture)


}

@objc func mainGestureActivated(){
    print("MainView Clicked")
}

@objc func subViewGestureActivated(){
    print("Subview Clicked")
}

它只打印被点击的 subview !是否有可能同时触发两个 gestureRecognizers,因为 main 正在封装其他。

最佳答案

首先你应该在你的VC中符合UIGestureRecognizerDelegate,然后实现shouldRecognizeSimultaneouslyWith的委托(delegate)函数。在函数内部,你应该检测 gestureRecognizerotherGestureRecognizer 是否是你想要的,如果是,你应该让它们同时工作,

  • 符合委托(delegate),并在 viewDidLoad 之外声明手势识别器(因为稍后您需要在委托(delegate)方法中访问它们。)

    var mainGestureRecognizer = UITapGestureRecognizer() var subGestureRecognizer = UITapGestureRecognizer()

  • 初始化您的识别器,并将您的 VC 设置为它们的委托(delegate):

    mainGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(mainGestureActivated))
    subGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(subViewGestureActivated))
    mainGestureRecognizer.delegate = self
    subGestureRecognizer.delegate = self
    
  • 实现上面提到的delegate函数,实现subView和mainView的同时识别:

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        if gestureRecognizer == subGestureRecognizer && otherGestureRecognizer == mainGestureRecognizer {
            return true
        }
    
        return false
    }
    

如果您希望它适用于 4 个不同的 subview ,那么您应该检查委托(delegate)方法中的 else if 语句。

关于ios - 从重叠 View 触发 UITapGestureRecognizers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53987529/

相关文章:

ios - UILabel 根据要显示的文本自动调整大小

iphone - UIPickerView ios 问题 - 无法识别的选择器

swift - 按下 tableviewCell 中的按钮并执行另一个 Controller

ios - 绘制虚线(不是虚线!),2017 年使用 IBDesignable

iphone - 带有模态 UIViewController 的透明背景

ios - uiview 上的圆角半径未按预期工作

ios - 在iOS中,UIView动画和Core动画有什么区别?

ios - 在片段着色器中计算纹理坐标(iOS/OpenGL ES 2.0)

ios - 如何制作线轨动画 CALayer?

swift - 合并相同类型的对象