как добавить более 100 uiimageviews в uiscrollview

У меня есть uiscrollview, и я добавляю один за другим uiimageviews, но когда я добавляю более 40 объектов, у меня возникают проблемы с памятью, я думаю, и приложение вылетает ... что мне делать? Я пытаюсь сделать приложение, подобное программе просмотра фотографий от Apple! Помоги пожалуйста!

Мне не нужны миниатюры, я просто хочу показать следующее изображение, когда пользователь переходит от одного к другому, но мне нужно выгрузить предыдущее изображение и показать следующее

я удаляю предыдущее вот так

UIImageView l;

l=[[scroll subviews] objectAtIndex:0];
[l removeFromSuperview];
l=nil;

а затем я добавляю следующий вот так

[scroll insertSubview:imageView atIndex:counter];

но я вижу черный фон без изображения

пожалуйста помоги!


person stefanosn    schedule 24.01.2010    source источник


Ответы (4)


Лучший способ сделать это - загрузить несколько изображений за раз в представление таблицы. В каждую ячейку таблицы поместите по три эскиза. Вам нужно будет создать собственную ячейку. Таким образом, ячейки таблицы будут исключены из очереди, а память будет использована повторно. Посмотрите проект Facebook Three20, я думаю, они реализовали его вот так, так что у вас будет код для работы.

http://joehewitt.com/post/the-three20-project/

person nevan king    schedule 24.01.2010

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

person Alex Reynolds    schedule 24.01.2010
comment
Я не хочу загружать 100 изображений в память, я хочу выгрузить предыдущее изображение, которое в настоящее время загружено, и добавить (загрузить) следующее. удалить предыдущее из памяти и добавить следующее ... - person stefanosn; 24.01.2010

Не делай так.

Если вы хотите отобразить 100 маленьких миниатюр, сначала измените их размер с помощью основной графики. Тогда они занимают гораздо меньше памяти, когда вы показываете 100 изображений одновременно.

Если вы хотите отображать 100 больших изображений, но одновременно видно только одно, используйте 1 или 2 просмотра изображений, которые загружают текущее и следующее изображения, и умно анимируйте их, чтобы они выглядели как бесконечный поток. Вы по-прежнему можете использовать scrollView, просто следите за его положением и соответствующим образом размещайте свои изображения.

person Alex Wayne    schedule 24.01.2010
comment
мне не нужны миниатюры, я просто хочу показать следующее изображение, когда пользователь переключает одно на другое - person stefanosn; 24.01.2010

Вот пример кода Apple, который делает то, что вы хотите. Ищите образец PageControl, он уже реализован. Обычно ползунок получает контроллер изображения из массива контроллеров; среди прочего, когда ползунок переключается на предыдущее или следующее изображение, контроллеры добавляются и удаляются из этого массива динамически, чтобы уменьшить объем памяти. Взгляните на пример кода, он довольно простой. Надеюсь, поможет.

person Andy    schedule 25.01.2010