Вопрос по objective-c, core-animation, calayer, opacity – CALayer непрозрачность анимации

18

Я хочу создать анимацию CALayer, которая дает видкричащий» эффект. За что япытаюсь оживитьнепрозрачность» собственность, но моя проблема в том, что я понятия не имею, с чего начать и как это сделать.

Вот графическое объяснение анимации:

opacity
   |    ___
1  |   |   |
   |   |   |    * repeatCount
0  |___|   |_ . . .
   -------------------------> time
    |______|
    duration

Непрозрачность начинается с 0, затем анимируется до 1, затем снова до 0 (эта анимация от 0 до 1 к 0 занимает количество секунд, равное длительности). Затем этот процесс повторяетсяRepeatCount» раз.

Вот'немного информации о коде:

float duration = ...; // 0.2 secs, 1 sec, 3 secs, etc
int repeactCount = ...; // 1, 2, 5, 6, ect

CALayer* layer = ...; // I have a CALayer from another part of the code
layer.opacity = 0;

// Animation here

done = YES; // IN THE END of the animation set this ivar to yes

Каков наилучший способ сделать это? Я никогда раньше не использовал CALayers, так что это также хорошая возможность узнать, как работает их система анимации. Кстати, я искал документы и понимаю, как вы добавляете одну или две простые анимации, но я понятия не имею, как это сделать.

Упвот для графа XD Will Von Ullrich

Ваш Ответ

2   ответа
2

что если вы хотите больше контроля над "график" (сколько времени нужно, чтобы затухание? сколько мы должны ждать, потом, сколько нужно времени, чтобы исчезнуть? и т. д.)Вы хотите объединить несколькоCABasicAnimationс в CAAnimationGroup.

Возможно, вы захотите прочитать главу моей книги на эту тему, последняя часть которой представляет собой учебник по CAAnimation и его потомкам:

http://www.apeth.com/iOSBook/ch17.html#_core_animation

Обратите внимание, что мое обсуждение направлено на iOS; в Mac OS X, если этоТам, где вы находитесь, архитектура представления / слоя немного отличается, но то, что она говорит о CAAnimation, все еще верно.

44

руководство) путем создания экземпляраCABasicAnimation и добавив его в слой.

Код будет выглядеть примерно так:

CABasicAnimation *flash = [CABasicAnimation animationWithKeyPath:@"opacity"];
flash.fromValue = [NSNumber numberWithFloat:0.0];
flash.toValue = [NSNumber numberWithFloat:1.0];
flash.duration = 1.0;        // 1 second
flash.autoreverses = YES;    // Back
flash.repeatCount = 3;       // Or whatever

[layer addAnimation:flash forKey:@"flashAnimation"];

Если вы хотите знать, когда анимация завершена, вы можете установить делегата и реализоватьanimationDidStop:finished: метод, однако это 'Лучше всего использовать блок завершения, поскольку это позволяет всему коду находиться в одном месте. Если вы пишете для iOS 4 или OS X, то вы можете использовать отличныйCAAnimationBlocks категория для достижения этой цели.

Спасибо! Это работает отлично. Только одно: этоanimationWithKeyPath:» Alex
Я неТ понять. Он исчезает, а затем сразу исчезает. Iulian Onofrei
@ Алекс хорошо, яОбновлю ответ (это было по памяти - не всегда самый надежный источник ...) trojanfoe
@trojanfoe был "руководство" должен связать здесь?developer.apple.com/library/archive/documentation/Cocoa/... Ben Leggiero

Похожие вопросы