我使用委託方法drawLayer:inContext來更改背景不透明度,因爲它在屏幕上移動時會變爲小框。該圖層在初始化時將UIImage設置爲內容。當使用drawLayer時,UIImage內容消失(並重新出現):inContext
每次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 2012-03-19 21:20:20
您可能需要兩個圖層,一個繪製背景,另一個繪製圖像。你會改變圖像層的'opacity'屬性。根據您的設置,其中一個圖層可能是另一個圖層的子圖層 - 這可能會更容易以這種方式進行組織。 – 2012-03-19 21:22:19
這正是我所做的。 2層,圖像層作爲另一層的子層,然後改變圖像層的不透明度。現在很好用!謝謝! – astoffel 2012-03-21 17:57:48