Кэширует ли UIImageView изображения? - PullRequest
8 голосов
/ 25 ноября 2011

Возможно, я задам тот же вопрос, который был задан другим человеком (но он не имеет ответов):
Ускорение первой анимации UIImageView (принудительное кеширование изображений)

Но, мой короткий вопрос:
У меня есть 60 изображений в ресурсах, в цикле интервала времени я собираюсь анимировать эти изображения, каждый раз устанавливая в UIImageView.image n'th изображение из ресурса.

Проблема: Первая анимация плохая!Когда я повторяю все изображения в одном и том же UIImageView, анимация идеальна.Можем ли мы предварительно кэшировать изображения в UIImageView?

РЕДАКТИРОВАТЬ: Или, может быть, мы можем сделать несколько трюков, чтобы сделать анимацию гладкой?

Ответы [ 3 ]

18 голосов
/ 25 ноября 2011

метод [UIImage imageNamed:@""] кэширует изображение. UIImageView нет. У меня была проблема в приложении с большим количеством изображений, которое вылетало из-за нехватки памяти. Чтобы исправить, если я изменил на [UIImage imageWithContentsOfFile:@""], что не кэширует изображение.

Для предварительного кэширования изображения вы можете просто вызвать [UIImage imageNamed:@""] для всех изображений, которые вы хотите в методе init. Но если вы получите предупреждение памяти, изображения будут освобождены.

4 голосов
/ 25 ноября 2011

UIImageView не кэширует изображение, как [UIImage imageNamed:@""].К сожалению, если у вас много изображений, imageNamed приведет к сбою вашего приложения, потому что ему не хватает памяти.

Вы можете предварительно загрузить все изображения в NSArray, используя [UIImage imageWithContensOfFile:@""].Если у вас есть массив, вы можете делать что хотите!

2 голосов
/ 25 ноября 2011

Нет, UIImageView не кэширует изображения.Свойство image объявлено как сохраняемое, поэтому при установке нового изображения imageView отправляет сообщение release старому изображению и retain новому.

Самый простой способ анимировать UIImageView - установить массив изображений для свойства animationImages и вызвать startAnimating метод

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil];
imageView.animationDuration = 2.0f;
[imageView startAnimating];
...