UITapGestureRecognizer未检测到UIScrollView中的CALayer

时间:2015-06-12 01:09:36

标签: ios xcode swift uiscrollview

我正在尝试在作为UIScrollView的子图层的CALayers上检测点击手势事件。以下是我设置识别器的方法:

在viewDidLoad中:

    self.tapRecognizer = UITapGestureRecognizer(target: self, action: "tapHandler:")
    self.tabScroller.addGestureRecognizer(tapRecognizer)

点击处理方法:

 func tapHandler(recognizer: UITapGestureRecognizer) {
    var touchLocation = recognizer.locationInView(recognizer.view)

    if recognizer.state == UIGestureRecognizerState.Ended {

        if let touchedLayer: CALayer = self.tabScroller.layer.hitTest(touchLocation) {
            println("\(touchedLayer.name)")
        }
    }
}

我知道tapHandler正在工作,因为它会执行一个放在其中任何位置的基本println("")字符串。

但println("(touchingLayer.name)")不断打印nil,我无法弄清楚为什么它没有识别CALayer上方的水龙头。

使用

将CALayers添加到tabScroller
tabScroller.layer.addSublayer(brushB)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的CALayer和带有水龙头的UIView位于视图层次结构的两个不同层上。事实上,核心动画比视图更低,UIViews由图层组成。因此,您必须使用hitTest或类似功能来确定您正在点击的图层。