【问题标题】:iOS, Swift 2.3 - UIPanGesture enabled, but UITapGesture disabled on the same UIViewiOS,Swift 2.3 - 启用 UIPanGesture,但在同一个 UIView 上禁用 UITapGesture
【发布时间】:2017-01-04 11:58:09
【问题描述】:

我有一个 UIView(蓝色),我想在它上面检测手势识别器。我想在这个视图上捕捉 Pan and Tap 手势,但是当用户点击这个视图时,我想“传递”这个触摸/点击到父视图(绿色)。

我的蓝色 UIView:

class SwipeView: UIView, UIGestureRecognizerDelegate {

    var tap: UITapGestureRecognizer!
    var pan: UIPanGestureRecognizer!

    func setup() {
        tap = UITapGestureRecognizer(target: self, action: #selector(Swipe.onTap))
        tap.delegate = self
        tap.enabled = true
        self.addGestureRecognizer(tap)

        pan = UIPanGestureRecognizer(target: self, action: #selector(Swipe.onPan))
        pan.delegate = self
        pan.enabled = true
        self.addGestureRecognizer(pan)

        self.backgroundColor = .blueColor()
    }

    func onTap() {
    }

    func onPan() {
    }

    override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
        return false
    }
}

即使我返回 gestureRecognizerShouldBegin = false green UIView 也不会捕获任何事件。那么,我该如何在功能上做到这一点?谢谢帮忙。

【问题讨论】:

  • @AbuUlHassan,谢谢链接,但主要问题是如何将触摸/事件“传递”到父视图。如果我点击蓝色视图,我想在绿色视图中接收事件,即在蓝色视图下是按钮,所以当我在按钮所在的位置点击蓝色时,我会收到操作按钮。
  • 那么你应该使用 Bringviewtofront 方法
  • @AbuUlHassan bringSubviewToFront 不会有任何改变,因为蓝色视图必须捕捉平移手势。
  • 可以以任何方式将您的代码发送给我,以便我检查问题所在。

标签: ios uiview uitapgesturerecognizer uipangesturerecognizer swift2.3


【解决方案1】:

像这样交付给父母:

func onTap(tapGestureRecognizer: UITapGestureRecognizer) {
    self.superview?.gestureRecognizerShouldBegin?(tapGestureRecognizer)
}

【讨论】:

  • 你可以尝试让superview成为新的代表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多