Как представить «галерею» на ipad? - PullRequest
2 голосов
/ 13 сентября 2010

Я создаю приложение для ipad, которое использует API YouTube для получения миниатюр видео и представления их в галерее (например, родное приложение YouTube на iPad).По сути, это просто набор UIImageViews в UIScrollView.Теперь проблема в том, что одновременное отображение всех изображений может привести к сбою приложения из-за проблем с памятью, поэтому идея состоит в том, чтобы сохранить только те изображения, которые можно увидеть, и записать остальные в файлы.

Моя проблема в том, как получить точные границы видимой области содержимого UIScrollView.

Есть идеи?

Ответы [ 5 ]

2 голосов
/ 29 сентября 2010

Вы смотрели на AQGridView ?Он предназначен именно для такого рода вещей.

2 голосов
/ 28 сентября 2010

Смотрите WWDC 2010 Session 104 - Проектирование приложений с прокруткой.

1 голос
/ 29 сентября 2010

Вот другой подход:

Используйте UITableView, но настройте свойства так, чтобы он выглядел как обычный вид прокрутки. (В основном, включите несколько миниатюр в каждой строке и удалите разделитель строк.)

По мере удаления строк с экрана, представления будут перерабатываться, и память, используемая вашими UIImageViews, может быть возвращена.

Обратите внимание, что это требует дополнительной работы, чтобы точно знать, какой эскиз был нажат пользователем, но это не так уж сложно. Я делал это в прошлом и использовал свойство tag для хранения индекса массива. Это не идеально, но достаточно простой взлом.

Обратите внимание, что это работает, только если ваша таблица прокручивается только вертикально. Насколько я знаю, у вас не может быть UITableView с горизонтальной прокруткой.

1 голос
/ 28 сентября 2010

В layoutSubviews вы можете получить видимые в данный момент границы, например:

CGRect visibleBounds = [self bounds];

Затем вы можете проверить, является ли UIView (например, UIImageView) видимым, сравнив его фрейм с visibleBounds:

BOOL visible = CGRectIntersectsRect(visibleBounds,cellFrame);

Просто проверьте каждый видимый вид и удалите те, которые находятся за пределами видимых границ.Затем проверьте набор данных для изображений, которые видны, но еще не имеют вида.

Вы должны также повторно использовать UIViews вместо того, чтобы создавать новые все время.Просто поставьте в очередь удаленные в NSSet и проверьте этот набор перед созданием новых.

1 голос
/ 14 сентября 2010

Когда прокручивается UIScrollView, вы должны проверить смещение содержимого (scrollView.contentOffset) и получить (например) значение x.С этим (и в зависимости от значения ширины кадра вашего uiscrollview) вы сможете узнать, что видит пользователь.Попробуйте распечатать эту информацию с помощью NSLog; -)

А затем, когда вы узнаете, какую «страницу» просматривает пользователь, вы можете загрузить какой-нибудь UIImageView.

Удачи: -)

...