我正在尝试使用CALayer来显示图像,但图像没有显示出来。我已经验证'image'不是nil,image.size是正确的,而layer.contents是一个有效的CABackingStore。
- (void)viewDidLoad
{
[super viewDidLoad];
layer = [[CALayer alloc] init];
[self.view.layer addSublayer:layer];
UIImage *image = [UIImage imageNamed:@"download.jpeg"];
layer.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
layer.position = self.view.center;
layer.contents = (id)image.CGImage;
[layer setNeedsDisplay];
}
这可能是什么问题?
答案 0 :(得分:4)
删除[layer setNeedsDisplay];
应该纠正行为。
从docs(强调添加):
调用此方法会导致图层重新缓存其内容。这导致该层可能调用其委托的displayLayer:或drawLayer:inContext:方法。 删除图层内容属性中的现有内容,以便为新内容腾出空间。
答案 1 :(得分:0)
layer = [[CALayer alloc] init];
[self.view.layer addSublayer:layer];
//UIImage *image = [UIImage imageNamed:@"download.jpeg"];
layer.bounds = CGRectMake(0, 0, 300,300);
layer.position = self.view.center;
//layer.contents = (id)image.CGImage;
layer.contents = (id)[UIImage imageNamed:@"download.jpeg"].CGImage;
[layer setNeedsDisplay];
删除[layer setNeedsDisplay];
我猜setNeedsDisplay使图层重绘内容,因此删除图像。
-