2015-06-12 51 views
0

我试图检测作为UIScrollView的子层的CALayers上的轻击手势事件。下面是我有识别器设置:UITapGestureRecognizer未检测到UIScrollView中的CALayer

在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(“(touchedLayer.name)”)连续打印零,我不知道为什么它不能识别CALayer上方的水龙头。

的CALayers使用

tabScroller.layer.addSublayer(brushB) 

我在做什么错误添加到tabScroller?

+0

为什么hitTest需要针对图层?再次测试tabScroller不起作用? –

+0

我不知道该怎么做,因为我不知道要为hitTest的withEvent部分放置什么。 – jwade502

+0

通过nil for withEvent。 –

回答

0

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