我有一個層託管視圖在一個定製NSView
子類設置是這樣的:調用setNeedsDisplay:YES上層託管視圖不重繪視圖
[self setLayer:rootLayer];
[self setWantsLayer:YES];
我所有的子層添加到層樹在每個子圖層上調用setNeedsDisplay
之後。每個圖層的內容由我的圖層委託的drawLayer:inContext
方法提供。
這裏是我的問題:
初始化我的觀點後認爲得到正確繪製。但是,當模型發生變化時,我從視圖控制器呼叫[myCustomView setNeedsDisplay:YES];
,則不會調用drawLayer:inContext
。
我很困惑,現在如何更新視圖:
- 我必須呼籲各的CALayer的
setNeedsDisplay
方法層樹? - 在圖層託管視圖上不應該調用
setNeedsDisplay:YES
本身觸發整個圖層樹的重繪?
感謝您的幫助。
編輯
我已經發現一些在的NSView類引用
阿層支持的觀點是,通過核心動畫層支持的圖。任何由視圖完成的繪圖都會緩存在背景層中。您只需調用setWantsLayer:值爲YES來配置層次支持的視圖。視圖類將自動爲您創建一個支持圖層,並使用視圖類的繪圖機制。當使用層次支持的視圖時,您不應該直接與圖層進行交互。
圖層託管視圖是包含您打算直接操作的核心動畫圖層的視圖。通過實例化Core Animation圖層類的實例並使用視圖的setLayer:方法設置該圖層,可以創建圖層託管視圖。完成之後,您將調用setWantsLayer:值爲YES。當使用圖層託管視圖時,您不應該依賴該視圖進行繪製,也不應該將子視圖添加到圖層託管視圖。
在我來說,我有一個層託管視圖。那麼這是否確實意味着我必須手動觸發重繪?我是否應該在自定義NSView中實現一個僞drawRect方法來調用更改後的CALayers上的相應setNeedsDisplay?
您的示例代碼鏈接已損壞,也許這是替換:https://developer.apple.com/library/mac/samplecode/CoreAnimationKioskStyleMenu/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40009512 – 2014-05-16 17:44:23