我已经尝试了所有内容并阅读了很多关于在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,但似乎没有什么能让它们正常工作。 有什么建议吗?
答案 0 :(得分:0)
这是非常简单的事情,但很容易被视为盲目:
我在打电话:
[nsView wantsLayer]
(认为这是设置wantLayer的一种方式(可能通过将其视为财产而受到影响)。)
这只是一个被忽略的吸气剂。
[nsView setWantsLayer:YES]
或
nsView.wantsLayer = YES;
当然是我想要的。