2

我正在尝试使用 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];
}

这里可能是什么问题?

4

2 回答 2

5

删除[layer setNeedsDisplay];应该纠正这种行为。

文档(强调添加):

调用此方法会导致图层重新缓存其内容。这导致层可能调用其委托的 displayLayer: 或 drawLayer:inContext: 方法。图层内容属性中的现有内容将被移除,以便为新内容让路。

于 2013-07-29T18:04:21.317 回答
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 使图层重绘内容,因此删除了图像。

--

于 2013-07-29T17:57:16.540 回答