objective-c - NSView 中 CALayers 的简单示例

标签 objective-c cocoa core-animation calayer

我正在尝试向 NSView 添加多个 CALayer,但显示时我的 View 仍然是空的:

这是我的代码:

- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {

    self.layer = [CALayer layer];
    self.wantsLayer = YES;
    CALayer *newLayer = [CALayer layer];
    NSImage *image = [NSImage imageNamed:@"page.png"];
    newLayer.backgroundColor = [NSColor redColor].CGColor;
    newLayer.contents = (id)[image CGImageForProposedRect:NULL context:NULL hints:nil];
    newLayer.frame = NSMakeRect(100,100,100,100);//NSMakeRect(0,0,image.size.width,image.size.height);
    newLayer.position  = CGPointMake(20,20);
    [self.layer addSublayer:newLayer];

}
return self;

是否有任何想法(或代码示例)来执行此任务?

感谢和问候,

最佳答案

设置层的代码需要在awakeFromNib方法中,而不是在initWithFrame函数中。

解释为什么:)

在 nib 文件中,您的 View 被标记为不需要图层,因此流程是

  • 在 initWithFrame: 方法中设置图层
  • nib 文件属性设置为清除您的图层。

您也可以保持代码不变,并告诉界面构建器您的自定义 View 需要一个层。

关于objective-c - NSView 中 CALayers 的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6723161/

相关文章:

macos - insertNewObjectForEntityForName 找不到实体 (Swift)

objective-c - 从窗口坐标转换 NSPoint

ios - 在 Swift 中,如何在不同的 ViewController 中永久更改 a 的标签文本?

ios - Swift 中带有核心动画的动画 UILabel 元素

objective-c - 在 Mojave 上使用 Core Animation 层绘制时如何解决透明系统颜色?

ios4 - iOS 4.2 : Flip image using block animations

objective-c - 在代码中定义 unichar 常量

objective-c - iOS:发送短信

objective-c - 当前模态和解除 View Controller 无法正常工作

iphone - 当某些东西异步运行时,是否意味着它不在主线程上?