Я не думаю, что вы должны создавать анимацию, накладывая 28 видов друг на друга
Я думаю, что основная проблема с вашим кодом - смешанные с цветом слои . Последний пиксель, который вы видите на экране, представляет собой композицию (то есть смесь) пикселя верхнего слоя и пикселей всех нижележащих слоев. Поэтому каждый нижележащий слой должен быть визуализирован, чтобы создать конечный пиксель, который вы видите на экране. Однако, если слой непрозрачный, процесс компоновки оптимизируется за счет отсутствия прорисовки нижележащих слоев. Например, если вы сложите 28 видов изображений друг на друга, это не сильно повредит процессу визуализации, потому что все виды изображений, кроме верхнего, просто не будут отображаться.
К сожалению, в вашем исходном коде нет оптимизации, потому что вы постоянно меняете alpha
свойство представлений изображений, накладываемых друг на друга. В худшем случае процесс смешивания должен выполняться для всех 28 изображений. Вы можете проверить, присутствует ли «смешивание цветов» в вашей анимации, выбрав «Отладка> Слои с цветовым смешением» в Симуляторе.
«Цветовые смешанные слои» могут значительно снизить производительность вашего приложения. Я бы порекомендовал вам создавать анимацию, обновляя изображения в виде одного изображения или, по крайней мере, уменьшать количество просмотров в вашей анимации.
приписка
Я не уверен, что я точно обнаружил вашу проблему с производительностью. Если нет, вы можете найти больше информации об оптимизации производительности рендеринга в этой теме: Что вызывает закадровый рендеринг, смешивание и layoutSubviews в iOS?