Swift:如何检测子视图中是否发生了滑动?

时间:2016-10-15 00:56:16

标签: ios swift uiview uiviewcontroller uigesturerecognizer

假设UIView,ParentView,包含子视图,ChildView和其他子视图。

UIViewController将滑动手势识别器附加到ParentView。

在ChildView上滑动会触发此滑动处理程序。

在ParentView的滑动处理程序内,有没有办法检测是否在ChildView上发生了滑动?

Per Josh的回答,这是尝试过的代码,但不起作用:

class TestViewController: UIViewController {    

@IBOutlet weak var targetView: UIView!


override func viewDidLoad() {
    super.viewDidLoad()
    initSwipeGestures()
}


fileprivate func initSwipeGestures() {
    let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didViewSwipe))
    let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didViewSwipe))
    let upSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didViewSwipe))
    let downSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didViewSwipe))
    leftSwipe.direction = .left
    rightSwipe.direction = .right
    upSwipe.direction = .up
    downSwipe.direction = .down
    view.addGestureRecognizer(leftSwipe)
    view.addGestureRecognizer(rightSwipe)
    view.addGestureRecognizer(upSwipe)
    view.addGestureRecognizer(downSwipe)
}


func didViewSwipe(_ sender:UISwipeGestureRecognizer) {
    let location = sender.location(in: view)
    let touchedView = view.hitTest(location, with: nil)

    // Ignore swipes if targetView was swiped
    if touchedView == targetView {
        print("YO YO YO")
    }
}
}

1 个答案:

答案 0 :(得分:0)

您可以使用UIView方法hitTest(_ point: CGPoint, with event: UIEvent?)在手势的位置下获取子视图。

func swipe(_ recognizer: UISwipeGestureRecognizer)
{
    let location = recognizer.location(in: self)
    let touchedView = self.hitTest(location, with: nil)
}
相关问题