Синхронизация CAAnimations - PullRequest
       7

Синхронизация CAAnimations

3 голосов
/ 27 ноября 2011

У меня есть повторяющаяся анимация, которую мне нужно синхронизировать с некоторыми другими переходными анимациями.Повторяющаяся анимация - это линия сканирования, которая перемещается по экрану в течение 4 секунд.Когда он проходит по изображениям внизу, эти изображения должны «мигать».

Прыгающие изображения могут приходить и уходить и двигаться по прихоти пользователя.Они также не являются частью одного и того же слоя.

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

Согласно этому сообщению:

= "> CAAnimation, чтовызывает метод в периодических интервалах анимации?

Базовая анимация «основана на времени», но я не уверен, что полностью понимаю, что это означает для повторяющейся анимации и насколько она надежна (я могуя не могу найти это упомянутое в какой-либо онлайн-документации.) Означает ли это, что если я начну повторять анимацию строки сканирования в момент времени x, она будет повторяться с точными интервалами в 4 секунды после запуска?похоже?

Спасибо за помощь!

Райан

1 Ответ

3 голосов
/ 28 ноября 2011

Немного поигравшись с этим, я обнаружил, что могу синхронизировать свои анимации, убедившись, что их начало и время совпадают.Я начал с установки beginTime анимации линии сканирования:

scanAnimation.beginTime = CACurrentMediaTime();

Оттуда я просто вычислил смещение в окне 4s (назовем его dt) и установил значение beginTimes других анимаций так:

blipAnimation.beginTime = scanAnimation.beginTime + dt;

Это прекрасно работало, даже если время начала было в прошлом;движок анимации фактически экстраполировал вперёд и анимировал следующий всплеск dt секунд после того, как анимация сканирования вернулась назад.

Недостатком является то, что я теперь совершенно забил частоту кадров.Я пытаюсь найти полезную информацию о производительности Core Animation, но пока безрезультатно.До сих пор я использовал довольно простой подход к размещению всех своих изображений и анимации, и я готов переписать много кода для его оптимизации, но я не хочу приступать к переписыванию без некоторой подготовки.Любые указатели на подробные обсуждения о том, как работает Core Animation, были бы очень полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...