手势识别器回调多个视图

时间:2018-03-16 02:11:32

标签: ios uipangesturerecognizer

我有一个自定义UIView,由9个大小相同的子视图组成。它基本上看起来像一个井字棋盘。

我已将UIPanGestureRecognizer添加到此自定义视图中。每次用户平移其中一个子视图时,我都想采取行动。例如,用户可以在一个手势中平移前3个(9个)子视图,在这种情况下,我想要采取3个动作。

我可以尝试做一些花哨的数学并找出每个子视图的框架,然后弄清楚手势何时从一个子视图跨越到另一个子视图。但是,当手势触及新的UIView时,我觉得应该有更优雅的方式来获得回调。这样的功能是否存在?

2 个答案:

答案 0 :(得分:0)

我能够通过使用hitTest找到更优雅的方式,它会返回启用了用户交互的最低子视图。我为pan手势识别器定义了回调:

var panSelected = Set<UILabel>()
@objc func handlePan(recognizer: UIPanGestureRecognizer) {
    let view = recognizer.view
    let loc = recognizer.location(in: view)
    if let gridLabel = view?.hitTest(loc, with: nil) as? UILabel {
        if !panSelected.contains(gridLabel) {
            // my code here
        }
    }

答案 1 :(得分:0)

尝试使用堆栈视图来分组视图具有相同的手势,&amp;使用

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(stackViewTapped))
myStackView.addGestureRecognizer(tapGesture)

如果需要实现不同的方法,只需添加另一个堆栈视图。