【问题标题】:NSView wont use CALayer at allNSView 根本不会使用 CALayer
【发布时间】: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


    【解决方案1】:

    这是一件非常简单但很容易被忽视的事情:

    我在打电话:

    [nsView wantsLayer]
    

    (认为这是一种设置 wantLayer 的方式(可能受到将其视为属性的影响)。

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

    [nsView setWantsLayer:YES]
    

    nsView.wantsLayer = YES;
    

    当然是我想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2015-05-22
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      相关资源
      最近更新 更多