Gra*_*ore 20 cocoa objective-c calayer quartz-graphics
我正在尝试学习如何CALayer
在Mac Objective-C应用程序中使用和实现,但我似乎无法做最基本的事情 - 添加一个新图层并设置其背景颜色/帧大小.任何人都可以看到我的代码有什么问题吗?
CALayer *layer = [CALayer layer];
[layer setFrame:CGRectMake(0, 0, 100, 100)];
[layer setBackgroundColor:CGColorCreateGenericRGB(1.0, 0.0, 0.0, 1.0)];
[self.layer addSublayer:layer];
[layer display];
Run Code Online (Sandbox Code Playgroud)
我把它放在- (void)drawRect:(NSRect)rect
我的自定义NSView
子类的方法中,但是当我运行应用程序时,它只显示一个空白视图,没有背景颜色或我创建的图层的证据.
omz*_*omz 55
首先,您不希望在drawRect:
视图的方法中添加图层,系统会自动调用该图层,您可能最终会获得比实际需要的图层更多的图层.initWithFrame:
或initWithCoder:
(对于nib文件中的视图)是初始化图层层次结构的更好位置.
此外,NSView
默认情况下,s没有根层(这与UIView
iOS上的完全不同).基本上有两种NSView
使用图层:s 支持图层的视图和图层托管视图.如果要直接与图层交互(添加子图层等),则需要创建图层托管视图.
为此,请创建一个CALayer
并调用视图的setLayer:
方法.然后,打电话setWantsLayer:
.顺序很重要,如果你setWantsLayer:
先打电话,你实际上是创建一个支持图层的视图.
您需要调用"setWantsLayer"方法.
有关setWantsLayer的说明,请查看以下文档:https: //developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html
简而言之,您的视图需要是图层托管视图.因为它是一个图层托管视图,所以您应该与图层进行交互,而不是与视图本身交互,也不要向其添加子视图.
[self setLayer:[CALayer new]];
[self setWantsLayer:YES]; // the order of setLayer and setWantsLayer is crucial!
[self.layer setBackgroundColor:[backgroundColor CGColor]];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14219 次 |
最近记录: |