2009-02-26 1 views
1

У меня есть коллекция различных последовательностей UIImage, которые я хочу оживить. Оказывается, использование таймера и выполнение drawRect имеют некоторые перфекционные проблемы.Как я могу реализовать анимацию 2d изображения на iPhone?

Мой следующий шаг состоял в том, чтобы исследовать с помощью UIImageView, но, по-видимому, это имеет утечку памяти, если вы обновляете массив animationImages более одного раза.

Следующим шагом было изучить возможности использования CALayer и CAAnimation, но после быстрого взгляда на документы они, похоже, не указывают, что они предназначены для анимации между изображениями (обратите внимание: я не меняю позицию или все остальное, только изображения).

Я иду по правому пути или есть какое-то другое направление, которое я должен исследовать?

ответ

1

Вам действительно нужно обновить массив изображений в UIImageView несколько раз? Я бы подумал, что было бы лучше создать новый UIImageView, если вам нужно изменить анимацию, как только она уже была использована?

Я слышал, что в анимации массива UIImageView наблюдается утечка памяти, но я использую ее с версии v2.0 и не имел никаких существенных проблем с ней. Разумеется, YMMV.

Чтобы установить массив кадров в первую очередь, загрузите NSMutableArray с помощью UIImages (по одному для каждого кадра) и установите его в свойство animationImages UIImageView (затем установите свойство animationDuration). Просто вызовите метод startAnimating в любое время, когда хотите его оживить. При нормальном использовании вам не нужно менять массив кадров после его установки.

+0

У меня есть 3 различных полноэкранных анимации, с которыми я работаю ... пока я собираюсь попробовать иметь 3 изображения и просто называть [bringToFront] на них, когда они мне понадобятся. – Jonas

+0

Хотя у меня есть другой вопрос ... есть ли способ определить, когда анимация UIImageView закончена? Я не вижу обратных вызовов/делегатов в документах. :/ – Jonas

+0

Мои анимации были довольно маленькими. Удерживание нескольких полноэкранных анимаций в памяти сразу будет большим ударом по памяти - удачи в этом. Если возможно, вы должны загружать фреймы для каждого UIImageView по мере необходимости. – philsquared

-1

Я не знаком с iPhone dev, но похоже, что вам нужен спрайт для 2-й анимации. Большой файл изображения, содержащий каждый кадр, и вы показываете только один фрагмент за раз. Подобно индексированию 2-мерного массива, но вы просто отслеживаете смещения пикселей для каждого кадра.

Смежные вопросы