我正试图让图像出现在CALayer.contents
. 这似乎很简单,但无论我做什么,我都无法渲染图像。渲染很好,CALayer
因为我可以看到它的背景颜色和角半径,但图像不会加载。
您在这里看到的是一个CAGradientLayer
应用了掩码的子类。内部正方形是我希望图像显示的地方,它被添加为子类的子层CAGradientLayer
。
设置它的代码非常简单。在init
:
self.imageLayer = [CALayer layer];
self.imageLayer.cornerRadius = kDefaultCornerRadius;
self.imageLayer.backgroundColor = [UIColor darkGrayColor].CGColor;
[self addSublayer:self.imageLayer];
然后稍后,我设置了图像:
- (void)setImage:(UIImage *)image {
self.imageLayer.contents = (id)image.CGImage;
[self.imageLayer setNeedsDisplay];
}
最后,在setFrame
:
CGFloat imageSize = self.bounds.size.width - 2*kDefaultMargin;
[self.imageLayer setBounds:CGRectMake(0.0, 0.0, imageSize, imageSize)];
[self.imageLayer setPosition:CGPointMake(self.bounds.size.width/2.0f, kDefaultMargin + imageSize/2.0f)];
[self.imageLayer setNeedsDisplay];
我已经知道或检查过的事情:
- 该层显然是正确添加的,因为它是可见的。
- 图像已添加并有效。
[UIImage imageNamed:@"info.png"]
正在代码中的其他地方使用,并实际显示和图像。1x 时为 16x16,2x 时为 32x32 - 代码以正确的逻辑顺序调用:
init
,setImage:
,setFrame
;
这里发生了什么?