Большая задержка, которую вы наблюдаете, связана с чтением и декодированием изображений, что UIImageView
делает до начала анимации.
Core Animation выполняет анимацию за вас и выполняет рисование на сервере визуализации, который находится в отдельном процессе. Помните, что то, что вы видите на экране, не обязательно представляет мгновенное изображение вашего слоя в вашем приложении: Базовая архитектура рендеринга анимации .
UIImageView
не предоставляет возможности дать вам точные результаты здесь. Я бы предложил:
- Сделайте
UIView
из ваших собственных.
- Создайте
CAKeyframeAnimation
с дискретным режимом расчета и вашими изображениями CGImageRefs
в качестве его значений.
- Установите делегата анимации на
IntroViewController
.
- Добавьте анимацию к слою вашего представления для клавиши «содержимое».
- Ваш
IntroViewController
получит animationDidStop: закончено: когда это будет сделано.
Однако следует учитывать две вещи:
Во-первых, вы получите лучшие результаты, используя фильм, а не серию изображений, поскольку фильм можно передавать из хранилища.
Во-вторых, и, что более важно, это решение улучшит временную ситуацию, но не полностью ее уменьшит. animationDidStop:finished:
вызывается, когда ваше приложение думает, что анимация завершена ... что не обязательно точно, когда оно кажется законченным.
Вам будет лучше, если вы не будете полагаться на обратные вызовы делегатов для синхронизации мультимедиа: вместо этого добавьте эту анимацию и анимацию, изменяющую ваши представления (при необходимости CAAnimationGroup
) в том же поворот цикла выполнения. Задержка последнего на beginTime
от продолжительности первой анимации. В зависимости от того, что вы делаете, вам может потребоваться установить режим заполнения второй анимации, чтобы получить правильное поведение во время первой.