Метод анимации изображений (например, фильма) на iPhone без использования MPMoviePlayer - PullRequest
2 голосов
/ 14 января 2009

Мне нужно иметь возможность отображать анимацию поверх статического изображения.

Учитывая, что MPMoviePlayer не дает вам контроля над чем-либо полезным, я могу думать только об этом, используя несколько статических изображений, которые мы отображаем (по одному) для создания анимации, похожей на фильм.

Я знаю, что мы могли бы использовать UIImageView для этого (установив свойство UIImageView animationImages и затем вызвав startAnimation ), однако в нашей анимации будет более 100 изображений - поэтому использование памяти будет максимально увеличено.

Есть ли у кого-нибудь хорошие способы сделать такую ​​анимацию? Используете Core Animation или OpenGL?

Я предполагаю, что нам нужно создать буфер изображений, и когда мы загружаем новые изображения, мы отображаем изображения из буфера изображений ??

Ответы [ 3 ]

6 голосов
/ 15 января 2009

Вы можете использовать Core Animation CALayer для размещения вашей анимации и поменять серию CALayers в и из этого основного слоя для выполнения покадровой анимации. Вы можете установить содержимое CALayer для размещения изображений в CGImageRef, используя его свойство content. Ряд CALayers, содержащих ваши изображения, может быть создан и сохранен в NSMutableArray по мере необходимости, а затем удален, когда сделано, чтобы минимизировать использование памяти.

Вы можете установить длительность перехода между кадрами, поместив replaceSublayer: with: вызов метода в транзакцию CAT, как показано ниже:

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:0.25f] // 1/4th of a second per frame
                 forKey:kCATransactionAnimationDuration];   
[mainLayer replaceSublayer:[imageLayers objectAtIndex:oldImageIndex] with:[imageLayers objectAtIndex:newImageIndex]];
[CATransaction commit];

Вы также можете обойтись без включения и выключения CGImageRef в содержимом вашего основного слоя, если время отображения вашего кадра достаточно короткое.

1 голос
/ 21 мая 2011

Как вы обнаружили, использование UIImageView.animationImages не работает, потому что оно использует всю вашу системную память и приведет к сбою вашего приложения. Вы можете использовать таймер и устанавливать свойство изображения UIImageView при каждом срабатывании таймера; объект UIImage, который вы используете в качестве содержимого, необходимо будет загружать при каждом срабатывании таймера. Это в основном аналогично подходу, описанному в другом ответе, за исключением того, что он использует CALayer вместо UIImageView. Загрузка изображения и изменение содержимого изображения при каждом срабатывании таймера - это нормальный подход, но он сможет получить около 11 FPS на iPhone только для полноэкранных изображений.

Если вы хотите использовать рабочий пример, который реализует логику переключения UIImageView, загрузите этот пример проекта PNG Animation для xcode. Я также предоставляю библиотеку AVAnimator , оптимизированную версию с той же функциональностью, она поддерживает Форматы Quicktime Animation и APNG, а также сжатие.

0 голосов
/ 20 октября 2012

Для последовательного анимации изображений,

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

Затем передайте этот массив анимации и все готово.

Well Объяснение Анимация в Iphone: серия изображений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...