Я использую CATransition
, чтобы перетасовать CALayer
в и из UIView
(UIView
не полноэкранный.) Новый слой входит справа, а старый слой уходит в оставил. CAlayer
имеют свойства содержимого, установленные на CGImageRef
с. Вот что я считаю подходящим кодом:
CATransition *transition = [CATransition animation];
transition.duration = transitionTime;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
transition.delegate = self;
[view.layer addAnimation:transition forKey:nil];
// onDeck is the layer stage-right and is about to enter
[view.layer addSublayer:onDeck];
// onStage is the layer currently in the middle of the view and is exiting
if (onStage)
[onStage removeFromSuperlayer];
Эта анимация происходит, происходит пауза в 1 секунду, а затем в анимируется новое изображение и т. Д. И т. Д. Это прекрасно работает в симуляторе, но на моем iPod Touch 2-го поколения в анимации иногда возникают сбои. В частности, анимируемый слой будет мерцать поверх текущего отображаемого слоя. Эти мерцания не соответствуют друг другу, но они заметны.
То, что я сузил, чтобы быть вероятным виновником (ями), это фоновая анимация, которую я выполняю за этим переходом. В полноэкранном режиме на заднем плане видны несколько десятков CAlayer
. Когда я удаляю эти фоновые анимации или устанавливаю длительность анимации для перехода к гораздо большей продолжительности (2 секунды +), анимация работает нормально (я хотел бы, чтобы время анимации составляло 0,75 секунды.)
Моя первая мысль (которая подтверждается приведенными выше наблюдениями) заключается в том, что я слишком сильно настаиваю на CoreAnimation (по крайней мере для моего iPod) и должен идти на компромисс. Почему у меня возникают проблемы с принятием этого, так это то, что сцена визуализируется очень хорошо (практически без лагов), кроме этого случайного мерцания.
Если у кого-то есть какие-либо замечания по этому вопросу или по оптимизации CoreAnimation в целом, я был бы очень признателен!
Спасибо за чтение
Обновление:
Был шанс проверить это на iPhone 4, и мерцание никогда не происходило. Кроме того, инструмент CoreAnimation подтвердил, что на моем втором поколении iPod Touch я постоянно получаю высокие 40–50 средних в FPS.