デリゲートメソッドのdrawLayer:inContextを使用して、小さなボックスが画面を移動する際の背景の不透明度を変更しています。このレイヤーは、UIImageが初期化されたときにコンテンツとして設定されていました。drawLayer:inContextを使用しているときにUIImageのコンテンツが消える(再表示される)
drawLayer:inContextが呼び出されるたびに、画像が消えたり再表示されたり(前後に切り替わります)、画面上の吃音のように見えるようになります。
私はデリゲートクラスのローカルivarとしてイメージデータを持っているため、毎回リロードする必要はありません。
私は何が原因かわかりません。何か案は?私が使用しているコードは次のとおりです:
- (id)init
{
self = [super init];
if(self) {
UIImage *layerImage = [UIImage imageNamed:@"Hypno.png"];
image = layerImage.CGImage;
}
return self;
}
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
float alpha = layer.position.y/layer.superlayer.bounds.size.height;
UIColor *reddish = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:alpha];
CGColorRef cgReddish = reddish.CGColor;
layer.backgroundColor = cgReddish;
[layer setContents:(id)image];
}
。 コンテンツ画像の不透明度を変更したいだけで、背景色を同じにしたい場合はどうすればよいですか? (私はこのレイヤーでsetNeedsDisplayを呼び出しています) – astoffel
2つのレイヤーが必要な場合があります.1つは背景を描画し、もう1つはイメージです。画像レイヤの不透明度プロパティを変更します。設定によっては、レイヤーの1つが他のレイヤーの下位レイヤーになる可能性があります。そのように構成する方が簡単な場合があります。 –
それはまさに私がやったことです。 2つのレイヤーを、画像レイヤーを別のレイヤーのサブレイヤーとして使用し、画像レイヤーの不透明度を変えるだけです。今すぐ素晴らしい作品!ありがとう! – astoffel