UIScrollView зависает при загрузке изображений в UIImageView

#iphone #uiscrollview #uiimageview #performance

#iPhone #uiscrollview #uiimageview #Производительность

Вопрос:

У меня есть UIScrollView с включенной подкачкой. Все изображения были загружены в начале и добавлены в UIImageViews, но у меня возникла проблема с памятью, поскольку изображений было больше, поэтому я решил загрузить следующее изображение во время прокрутки, если изображение еще не установлено. Если я получаю предупреждение о памяти, я удаляю все изображения, кроме текущего.

Проблема в том, что scrollview зависает на несколько миллисекунд, если я прокручиваю.

Я использую

 UIImage *image = [UIImage imageNamed:@"path/to/image.png"];
  

чтобы загрузить изображения. Если я использую метод imageWithContentsOfFile, это отнимает намного больше времени.

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

Заранее спасибо за ваши ответы.

Ответ №1:

 [UIImage imageNamed:]
  

кэширует изображения для вас, вот почему это лучше, чем imageWithContentsOfFile. Поскольку эти изображения отображаются в ячейке таблицы, предположительно, им не обязательно быть такими большими. Каковы размеры изображений в файловой системе? Если вы просто помещаете UIImage в UIImageView и зависаете от этого при масштабировании, я предполагаю, что масштабирование происходит во время прокрутки. Можете ли вы создать эскизы для каждого изображения в файловой системе и использовать их?

Комментарии:

1. Изображения отображаются в UIScrollView. Разрешение изображений составляет 960×480 (разрешение iphone 4) и уменьшено. Я подумал, что проще использовать одно изображение, за исключением добавления второго с @2x для iphone 4. Создание эскизов, я думаю, отняло бы у меня много времени. Другого способа нет?

2. если масштабирование ваших изображений зависит от UIImageView, то вы в любом случае эффективно создаете эскизы в памяти. Вы не хотите, чтобы это происходило во время прокрутки. Я бы попытался найти для этого другое время, например, при запуске приложения. Что касается загрузки пикселизированного изображения, я не знаю ни одного волшебного способа сделать это. Создайте версию изображения в низком разрешении и загрузите ее первой, затем исчезните в высоком разрешении. Версия с низким разрешением может быть просто увеличенной миниатюрой.