今天我决定尝试使用CALayers来显示覆盖NSView的矩形框。该图层将包含一些文本,并将根据何时需要显示变量文本来打开和关闭。我想使用CALayer的原因是你可以轻松地使用CALayer进行渲染和动画。我实现了我的图层,它就像一个魅力。但是,在使用我的GUI并在各种按钮上单击几次打开和关闭图层之后,我认为层视图的层次结构似乎是偏斜的。我认为焦点必须切换到其他一些已被关闭的NSView。我基本上对于在给定时间处理哪个层而感到困惑,并且我失去了对视图层次结构的控制。
我的问题是:我应该使用NSView或CALayers的子视图来显示可能在应用程序中多次打开和关闭的内容吗?在我看来,很容易失去对你正在处理的层的控制。有没有办法通过名称识别当前图层,以便您可以重复使用图层,或者最好是使用图层,删除它们,然后在下次需要时重新创建图层?
感谢您的时间。干杯,特隆德
答案 0 :(得分:9)
FWIW,
我经常很快地“打开和关闭”CALayers,没有任何问题。如果你愿意,你可以这样做!
删除它们并在运行中快速重新创建它们似乎不会导致任何问题。 (这不是一个大资源用户,我从来没有看到任何其他问题。)如果你愿意的话,一定要这样做!
我实际上不明白你对“命名”图层的意思 - 当然,因为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在重叠的兄弟姐妹之间存在伪劣/错误的关系:它们基本上不起作用。在这里阅读: port an iOS (iPhone) app to mac?希望它有所帮助!
PS - 这些也可以帮助CALayers ......
Exactly what should happen in a CALayer's display/drawRect methods?
What's the difference and compatibility of CGLayer and CALayer?