通过位置(CGPoint)识别UIView中的子视图

时间:2019-03-10 15:27:19

标签: ios swift uiview uigesturerecognizer uitapgesturerecognizer

我正在尝试找出在CGPoint中给定的UIView上查找确切子视图(如果有)的最佳方法。

我的scene / ViewController的一部分是一个自定义UIView子类(在XIB中设计),它提供UIStackView子视图(也是自定义,XIB设计)。

该VC在该自定义视图上有一个UITapGestureRecognizer,在我的@IBAction中,我想确定其子视图中哪个特定的子视图已被轻按,然后相应地进行处理:

@IBAction func handleTap(recognizer:UITapGestureRecognizer) {

    let tapLocation = recognizer.location(in: recognizer.view)
    if let subviewTapped = customView.subviewAtLocation(tapLocation) {
        handleTapForSubview(subviewTapped)
    }
}

但是,我不知道如何实现该subviewAtLocation(CGPoint)方法。我无法在标准的UIView方法中找到任何内容。

欢迎提出建议。

或者,我考虑将抽头识别器添加到每个子视图中,然后委派给父级,然后委派给VC,但这感觉效率很低,就像在视图中添加了过多的控制逻辑,而不是VC

谢谢。

1 个答案:

答案 0 :(得分:0)

//使用hitTest()方法。这给出了包含该点的视图

let subView = parentView.hitTest(point, with: nil)