2010-10-23 61 views
0

我想在Quartz的幫助下實現繪圖類。 我希望能夠保存在單獨圖層上繪製的部分。我希望這些圖層是可檢索的,所以我可以根據命令刪除/隱藏/顯示圖層。繪圖類允許圖層控制

我可以保存多個CGLayerRef作爲我班的NSMutableArray屬性,然後能夠檢索它們嗎?如果是的話,你能否指點我一個例子。

如果上述「體系結構」中存在任何缺陷,請指出可以幫助我完成對圖的分層控制的替代解決方案。

謝謝。

回答

1

您創建的CALayers當然可以存儲在NSMutableArray中,您可以稍後使用它們,通常通過動畫化它們的屬性或要求它們自己重繪。

通常你創建一個自定義的UIView,在該視圖中創建和管理圖層。這些圖層可以是該視圖的成員變量,也可以將它們存儲在數組中。當事情發生在您的應用程序中時,您的視圖會相應地爲這些圖層生成動畫。通常你想對觸摸事件作出反應(你也在特定的視圖中執行 - touchesBegan/Moved ...)併爲這些圖層設置動畫。

只要您撥打[layer setNeedsDisplay],CALayer自行緩存內容,或者更改其邊界(大小)(如果needsDisplayOnBoundsChange爲真)。實際上,在我所做的所有應用程序中,這種重繪很少發生 - 只有在數據發生變化並且圖層需要重繪的情況下。動畫層,轉換它們的大小,旋轉,改變位置 - 在任何這些層都不會重繪。隱藏,顯示,更改透明度 - 不需要重繪。

那個「繪畫課」你說的是 - 你其實只有兩種選擇 - 要麼你延長CALayer並覆蓋drawInContext:,或創建基本CALayer,設置它的委託,有你在drawLayer:inContext:畫。我個人更喜歡創建代表。

+0

我不明白最後一部分,我不明白爲什麼我需要修改CALayer類的行爲,我只是嘗試將我的圖層堆疊到一個數組中,我認爲這對我來說已經足夠了。 – Interfector 2010-10-23 10:10:59

+0

我想我最初誤解了你的問題,認爲你想以某種方式存儲在圖層中繪製的內容,以便稍後可以檢索它。因此,我繼續討論如何緩存它們的內容時不需要這些內容。如果你只想知道你是否可以將圖層實例存儲到一個數組中 - 當然,它只是一個對象,如果你想在未來引用它,你必須將它存儲在某個地方,成員變量或數組中。 – Michal 2010-10-23 12:06:56