NSView根本不会使用CALayer

时间:2014-08-10 00:48:27

标签: cocoa calayer nsview drawrect

我已经尝试了所有内容并阅读了很多关于在NSView中使用CALayer的内容,但无法获得在iOS上运行良好的代码以便在Mac上运行。

我正在打电话

[ nsView setLayer:[CALayer layer]];
[ nsView wantsLayer];

创建一个图层,因为我已经读到了应该的任何地方。 然后我尝试设置图层的背景颜色,添加一个子图层并设置它的背景颜色,但无论我做什么,我都会得到一个黑色的窗口。

整个编程创建的应用程序,在删除所有笔尖之后,尝试制作渐变以确保我获得一些图层内容:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSWindow *mainWindow;
NSView *nsView;

mainWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(20, 500, 200, 400)//screenRect
                                         styleMask:NSTitledWindowMask
                                           backing:NSBackingStoreBuffered
                                             defer:NO];
[mainWindow setTitle:@"My Window"];

CAGradientLayer *layer;

nsView = [ [ NSView alloc] initWithFrame:NSMakeRect(20, 20, 200, 400)];

[mainWindow makeKeyAndOrderFront:nil];

[ nsView setLayer:[CALayer layer]];
[ nsView wantsLayer];
[ nsView setLayerContentsRedrawPolicy:NSViewLayerContentsRedrawOnSetNeedsDisplay];
layer = [CAGradientLayer layer];
layer.frame = CGRectMake(0, 0, 200, 400);
layer.colors = @[ (id)CGColorCreateGenericRGB(1, 0, 0, 1), (id)CGColorCreateGenericRGB(1, 1, 0, 1) ];
layer.startPoint = CGPointMake(0.5, 0);
layer.endPoint = CGPointMake(0.5, 1);
[nsView.layer addSublayer:layer];
[layer setNeedsDisplay];
[nsView setNeedsDisplay:YES];
[mainWindow setContentView:nsView];

}

无论我做什么,我都没有得到任何关于图层被使用的迹象。我调试时存在它和子视图,但从未显示过。视图的drawRect方法也被调用一次。

我已经阅读了几天使用CALayers for NSViews,但似乎没有什么能让它们正常工作。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是非常简单的事情,但很容易被视为盲目:

我在打电话:

[nsView wantsLayer]

(认为这是设置wantLayer的一种方式(可能通过将其视为财产而受到影响)。)

这只是一个被忽略的吸气剂。

[nsView setWantsLayer:YES]

nsView.wantsLayer = YES;

当然是我想要的。