iOS Core-Animation: проблемы с производительностью в матрицах CATransaction / Interpolating transform

Я тестирую производительность моего приложения для iPhone:

// using CATransaction like this goes from 14fps to 19fps
[CATransaction begin];
[CATransaction setDisableActions: YES];

// NEG, as coord system is flipped/messed up
self.transform = CGAffineTransformMakeRotation(-thetaWheel);

[CATransaction commit];

Вопрос: почему отключение поведения по умолчанию основной анимации интерполяции между старой и новой матрицами преобразования дает такой прирост производительности?

Что они могли бы делать, что могло быть настолько вычислительно дорогим? Даже если они используют самую сложную технику в мире для интерполяции между двумя матрицами, я не могу поверить, что это будет 5fps?!

Я не могу себе представить, что этот процесс отличается от M_resultant = k*M_last + (1.-k)*M_target

1 ответ

Интерполяция между двумя позициями создает CAAnimations, которые должны применяться для каждого кадра и синхронизироваться между потоком рендеринга и основным потоком.

Стоимость транзакции будет зависеть от того, сколько слоев вы анимируете одновременно; попробуйте профилировать ваше приложение, чтобы увидеть узкие места.

Другие вопросы по тегам