Вопрос по objective-c, opacity, calayer, core-animation – 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   ответа
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 категория для достижения этой цели.

Я не понимаю. Это исчезает, и затем это немедленно исчезает.
@ Алекс Хорошо, я обновлю ответ (он был из памяти - не всегда самый надежный источник ...)
Спасибо! Это работает отлично. Только одно: это 'animation' сithWeyPath: & apos; Alex
2

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

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

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

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

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