Pull to refresh

Comments 7

Я поначалу так же делал, потом плюнул и для сложных анимаций задаю таймер и в нем вычисляю новый шаг и делаю смещение (трансформацию) картинок.
А чем вам не угодил CAKeyframeAnimation?
Не имел доступа к событиям внутри анимации. Типа на 10 шаге звук сыграй, на 20 — ом картинку поменяй…
Обошёл это по-другому: сделал свои классы для анимации (некоторые из которых являются обёртками для Core Animation), события и переключения между ними. Составляю цепочки таких анимаций и включаю их последовательно или параллельно.

Также у CAKeyframeAnimation от предка есть свойство CAValueFunction. Если это то, о чём я думаю — можно реализивать свои события. Правда, не пробовал, чистое предположение.

зачем флаг isAnimating?
у CALayer есть такой метод:
- (CAAnimation *)animationForKey:(NSString *)key
Используя этот метод можно узнать, есть ли конкретная анимация у этого объекта или нет.
А чтоб «не прыгало» используйте kCAFillModeForwards в качестве fillMode. (как вы и делаете) и уберите
pathAnimation.removedOnCompletion = NO;
Это сработает если анимация отиграла до конца и вы не будете проигрывать потом другую анимацию. Если хотите иметь возможность прервать её во время исполнения, или будете потом проигрывать другую, придётся ручками снимать анимацию и сохранять текущее состояние. Иначе будет прыгать. Во всяком случае, у меня не получилось добиться нужного поведения, возможно нужно менять какие-то другие свойства анимации.

isAnimating в данном случае действительно можно убрать. За основу брался код из проекта, гда анимация — это не всегда Core Animation.
Когда вы писали про сложность найти хорошие примеры — вы имели в виду русскоязычный сектор?
Так как просто примеров-то множество, из первых пришедших в голову — приложение с множеством примеров от Ронквиста с CocoaHeads, вот набор поиграться, море вопросов с ответами на стэке.
Sign up to leave a comment.

Articles