2015-06-12 55 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或類似功能來確定您正在點擊的圖層。