2014-04-23 25 views
2

我有一個CAShapeLayer,並試圖通過將它傳遞給CGContextDrawLayerAtPoint來繪製它,但得到一個有關將一個CAShapeLayer * __ strong的可保留參數傳遞給期望CGLayerRef的函數的錯誤。CAShapeLayer可以傳遞給CGContextDrawLayerAtPoint嗎?

我已經做了一些瀏覽,但無法弄清楚如何轉換它/將CAShapeLayer橋接到CGLayerRef。

如果它不可能轉換,那麼CAShapeLayer可以使用CGLayerCreateWithContext創建嗎?

我在做的是用UIBezierPath創建一個圖形,然後創建一個CAShapeLayer並將其路徑設置爲UIBezierPath,然後我想顯示它。我可能使用addSublayer來顯示形狀圖層但是我要在多個不同的點顯示相同的形狀,而不是添加多個我打算使用CGContextDrawLayerAtPoint在不同的點上顯示它的子圖層。

回答

1

簡短回答:沒有。

長答案: CAShapeLayer是一個核心動畫層(CALayer)。你把它放入你的界面,並且它自己吸引。

我知道它很混亂,它們使用單​​詞「圖層」的方式,但CGContextDrawLayerAtPoint與此無關(它以完全不同的方式使用單詞「圖層」,指CGLayer,它完全不同並完全不同地使用)。你在這裏錯過了一個錯誤的兔子洞。

我可以使用addSublayer:顯示形狀層

不可能。必須。這就是你用CAShapeLayer所做的。

您正在尋找的替代方法是將CGPath從CAShapeLayer中提取出來,然後在CGContext中分配該路徑並在多個位置多次提取它。但是真的沒有必要這樣做。 iOS繪圖都是關於圖層的;不要害怕有多個子層。

+0

請參閱我的「羅盤」示例,其中複雜繪圖由許多子圖層組成。別擔心。要開心。 http://www.apeth.com/iOSBook/ch16.html – matt

+0

謝謝,是的,我被術語層的雙重含義弄糊塗了(我沒有注意到CA和CG部分)。因此,有幾十個子層在很大程度上不是無效的? – Gruntcakes

+0

不要繪製它們。現在,你開始動畫/滾動所有這些,這可能是一個問題。但是讓它們只顯示在屏幕上 - 沒問題,這就是屏幕_is_,它是一個層的渲染樹。你在iOS屏幕上看到的一切都是一層。 – matt

相關問題