我使用委托方法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