【发布时间】:2014-08-10 00:48:27
【问题描述】:
我已经尝试了所有方法并阅读了很多关于在 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 用于 NSViews 的信息,但似乎没有任何东西可以让它们工作。 有什么建议吗?
【问题讨论】:
标签: cocoa calayer nsview drawrect