2012-02-08 86 views
0

有三個圖層添加到UIView。一層繪製一個矩形。一個畫一個圓圈。一個繪製一個多邊形。圖層的不透明度爲no。當我觸摸多邊形時,我想獲得繪製多邊形的正確圖層。這三層完全填滿了視野。我已經實現了這一點。但我不知道我們是否有更好的解決方案來解決它。我的方式是這樣的: 1.使用-drawLayer:inContext繪製內容。存儲您使用的CGPath。 2.在UIView的-touchedEnded:withEvent方法中。使用CGPathContainsPoint()檢測CGPath是否包含觸摸點。如何檢測CALayer的繪製內容是否包含觸點?

也許這是解決這個問題的蠢方法。誰能告訴我如何更好地解決問題?

回答

1

如果您需要對路徑進行準確的命中測試,恐怕如果您按照建議使用CGPathContainsPoint,則您必須自己檢查/迭代圖層層次結構。

迭代時,您可以通過跳過圖層位於其幀外的圖層來優化它。

對於不太精細的控制,你可以通過使用CALayer小號

- (CALayer *)hitTest:(CGPoint)thePoint 

方法獲得觸摸層。

如果你有一個嵌套級別爲< 1000的層次結構(這幾乎總是真的),我不會太擔心。

+0

另一個問題是關於CGPath,當我使用CGPathContainsPoint()來檢測點。我需要緩存CGPath。所以我沒有立即釋放它。如果在-drawLayer中使用CGPathRelease():inContext:,我無法獲取-touchédEnded:withEvent:中的CGPath。我不知道應該在哪一層釋放CGPath。 – pyanfield 2012-02-08 13:57:19

+0

您不需要緩存路徑,使用'CAShapeLayer'繪製形狀。它有一個「路徑」屬性,你可以隨時訪問。 – 2012-02-08 14:12:30

+0

是的,你是對的。謝謝。 – pyanfield 2012-02-09 09:32:54

相關問題