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, которые должны применяться для каждого кадра и синхронизироваться между потоком рендеринга и основным потоком.
Стоимость транзакции будет зависеть от того, сколько слоев вы анимируете одновременно; попробуйте профилировать ваше приложение, чтобы увидеть узкие места.