当父NSView想要图层时,NSImageView消失(setWantsLayer:YES)

时间:2013-11-06 17:20:31

标签: macos cocoa calayer nsview nsimageview

我有一个简单的自定义NSView,它有一个标签和一个图像。目前视图效果很好(所有拇指都是我自定义视图的实例):

enter image description here

但是,我想设置这些缩略图的不透明度。由于viewInstance.layer.opacitylayer,因此设置nil不起作用。当我首先在某处使用[viewInstance setWantsLayer:YES]并设置不透明度时,文本的不透明度会发生变化(正确显示),但图像视图会完全消失:

enter image description here

我尝试先创建一个图层,然后分配它,然后在阅读完这个问题后调用setWantsLayer:How to add a CALayer to an NSView on Mac OS X但没有任何改变:

CALayer *selfLayer = [[CALayer alloc] init];
[selfLayer setFrame:CGRectMake(0, 0, 100, 100)];
[self setLayer:selfLayer];
[self setWantsLayer:YES];

我已尝试过创建图层并将其显示在图片视图中的所有组合(只需调用setWantsLayer:,创建图层然后分配它,调用它的display方法),但仍然没有变化:

[self addSubview:self.imageView];
CALayer *imageLayer = [[CALayer alloc] init];
[imageLayer setFrame:CGRectMake(0, 0, 100, 100)];
[self.imageView setLayer:imageLayer];
[self.imageView setWantsLayer:YES];

我尝试将图片视图的图层添加为主视图的子图层,然后显示它:

[self.layer addSublayer:self.imageView.layer];
[self.imageView.layer display];
[self.layer display];

但是,图像不会显示,而文本总是正确显示。当我注释掉有关分配和想要图层的代码时,图像会再次显示,但很明显,我无法使用图层不透明度。我在OS X Mavericks上使用OS X SDK 10.8。我做错了什么?

更新:我最终完全摆脱NSImageView并通过设置图层的NSImage属性将contents直接绘制到图层中。但是,这只是解决我这个项目问题的另一种方法,它仍然没有回答原来的问题。

1 个答案:

答案 0 :(得分:1)

我最终完全摆脱了NSImageView,并通过设置图层的NSImage属性将contents直接绘制到图层中。但是,这只是解决该项目我的问题的另一种方法,它仍然不能回答原始问题。