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