2009-12-15 3 views
1

Как и для this previous question, я хочу применить оттенок произвольного цвета к произвольному изображению (a UIImageView). Тем не менее, я хочу, чтобы оттенок исчезал в течение N секунд времени, чтобы иметь эффект «пульса». Я буду запускать импульс каждые M секунд.Анимировать оттенок UIImageView

Хотя я думаю, что смогу выстроить наивное решение, используя NSTimer, чтобы изменить оттенок, я думаю, что, возможно, я смогу использовать некоторые из возможностей Core Animation, чтобы иметь гораздо более элегантное (и эффективное) решение. Однако я не очень хорошо разбираюсь в Core Animation.

Создает «импульс», как это возможно с помощью Core Animation? Если да, то как?

ответ

1

Если вы планируете использовать Core Animation, этот подход будет отличаться от того, что было продемонстрировано в вашей ссылке на предыдущий вопрос SO. Вместо этого создайте слой, который использует цвет, который вы используете для оттенка, а затем одушевите непрозрачность этого слоя. Что-то вроде этого:

CALayer *tintLayer = [CALayer layer]; 

// Center the layer on the view 
[tintLayer setBounds:[imageView bounds]]; 
[tintLayer setPosition:CGPointMake([imageView bounds].size.width/2.0, 
            [imageView bounds].size.height/2.0)]; 

// Fill the color 
[tintLayer setBackgroundColor: 
      [[UIColor colorWithRed:0.5 green:0.5 blue:0.0 alpha:1.0] CGColor]]; 
[tintLayer setOpacity:0.5]; 
[[imageView layer] addSublayer:tintLayer]; 

// Add the animation 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
[animation setFromValue:[NSNumber numberWithFloat:0.5]]; 
[animation setToValue:[NSNumber numberWithFloat:0.0]]; 
// Animate back to the starting value automatically 
[animation setAutoreverses:YES]; 
// Animate over the course of 5 seconds. 
[animation setDuration:5.0]; 

[tintLayer addAnimation:animation forKey:@"opacity"]; 

Единственный вопрос, я не уверен в том, будет ли она работать так же, так как мы не указываем режим смешивания в оттенках слоя. Мне нужно будет посмотреть, какое смешение происходит по умолчанию с помощью CA.

С уважением.

UPDATE: Найдено another SO сообщение, в котором говорится, что смешивание в CA зависит от свойства «непрозрачного» слоя.

+0

Будет ли это работать, если вышеупомянутое произвольное изображение не является прямоугольным (например, круг) или просто имеет границу пробела вокруг (пиксели с 0 альфа)? Потому что, если вы вызываете setBackgroundColor :, вы собираетесь установить цвет для тех пикселей, которые не должны быть «освещены». –

+0

Правильно, это закрасит весь прямоугольник. Я думаю, что это также будет верно и в отношении другого подхода Core Graphics. Я не уверен в этом, хотя я не пробовал. –

+0

Вы можете добавить маску к tintLayer. Я смотрю на тонирование UIImageView - tintLayer.mask = imageView.layer может сделать трюк. Надежда imageView.layer нравится использовать в двух местах. –