Я использую метод делегата drawLayer: inContext, чтобы изменить непрозрачность фона для небольшого окна при его перемещении по экрану. У слоя был UIImage установлен как контент, когда он был инициализирован.Содержимое UIImage исчезает (и снова появляется) при использовании drawLayer: 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
Возможно, вам понадобится два слоя, один для рисования фона, другой - изображение. Вы изменили бы свойство 'opacity' слоя изображения. В зависимости от вашей установки один из слоев может быть подслоем другого - это может упростить организацию этого пути. –
Это именно то, что я сделал. 2 слоя с уровнем изображения в качестве подслоя другого, а затем просто изменяя непрозрачность слоя изображения. Прекрасно работает! Благодаря! – astoffel