簡體   English   中英

NSView或CALayer的子視圖?

[英]Subview of NSView or CALayer?

今天我決定嘗試使用CALayers來顯示覆蓋NSView的矩形框。 該圖層將包含一些文本,並將根據何時需要顯示變量文本來打開和關閉。 我想使用CALayer的原因是你可以輕松地使用CALayer進行渲染和動畫。 我實現了我的圖層,它就像一個魅力。 但是,在使用我的GUI並在各種按鈕上單擊幾次打開和關閉圖層之后,我認為層視圖的層次結構似乎是偏斜的。 我認為焦點必須切換到其他一些已被關閉的NSView。 我基本上對於在給定時間處理哪個層並且失去了對視圖層次結構的控制感到非常困惑。

我的問題是:我應該使用NSView或CALayers的子視圖來顯示可能在應用程序中多次打開和關閉的內容嗎? 在我看來,很容易失去對你正在處理的層的控制。 有沒有辦法通過名稱識別當前圖層,以便您可以重復使用圖層,或者最好是使用圖層,刪除它們,然后在下次需要時重新創建圖層?

謝謝你的時間。 干杯,特隆德

FWIW,

  1. 我經常很快地“打開和關閉”CALayers,沒有任何問題。 如果你願意,你可以這樣做!

  2. 刪除它們並在運行中快速重新創建它們似乎不會導致任何問題。 (這不是一個很大的資源用戶,我從來沒有看到任何其他問題。)如果你願意的話,一定要這樣做!

  3. 我實際上不明白你對“命名”層的意思 - 當然, 因為iVars他們有一個名字 必須為所有CALayers命名

這是典型的生產代碼(來自.h文件):

CALayer         *rearLayer;
CALayer         *hugeBasket;        // holds everything for ez-on/off
CALayer         *theActualSkyline;  // nb, same name as similar UIView
CALayer         *someTrees;         // minor stuff
CALayer         *someBushes;        // overs

// for the stupid help basket..
CALayer         *LLDRear;
CALayer         *LLDArrowLeft;
CALayer         *LLDArrowRight;
CALayer         *LLDPointlessUpArrow;
CALayer         *LLDYetAnotherStupidShadow;

// etc etc..

等等。 你知道,我真的不知道你怎么能“不”命名它們!

最后,

4,不要忘記圖層比NSViews“更好”,因為:NSViews在重疊的兄弟姐妹之間存在偽劣/錯誤的關系:它們基本上不起作用。 在這里閱讀: 將iOS(iPhone)應用程序移植到mac?

希望能幫助到你!

PS - 這些也可以幫助CALayers ......

究竟應該在CALayer的display / drawRect方法中發生什么?

CGLayer和CALayer有什么區別和兼容性?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM