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];

また

remove [layer setNeedsDisplay]; setNeedsDisplay がレイヤーを作成してコンテンツを再描画したため、画像を削除したと思います。

--

于 2013-07-29T17:57:16.540 に答える