に画像を表示するのに苦労してい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;
ここで何が起こっているのですか?