Лучший способ реализовать мозаичную галерею изображений в стиле iOS Фото - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть приложение, которое в основном можно использовать для загрузки, загрузки и управления фотографиями из различных веб-сервисов.

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

Я думал, что мог бы использовать NSMutableArray и подкласс UIScrollView для создания этой функциональности с нуля, но я действительно хотел бы использовать NSFetchedResultsController, потому что некоторые данные, связанные с изображениями, динамически /асинхронно обновляется / вставляется / удаляется в Core Data.

Сейчас я настроил что-то довольно хакерское.
Я создал отдельную сущность Core Data для хранения связей с 4 фотографиями в каждом управляемом объекте, и я создал UITableViewцикл через них.Затем делегат cellforrow просматривал 4 фотографии в каждой ячейке таблицы.Такой подход - отстой, потому что трудно динамически удалять и вставлять фотографии, и мне приходится восстанавливать отношения и перезагружать таблицу каждый раз, когда производится обновление.

Я смотрел некоторые другие библиотеки, которые делают это, но я действительно хочучтобы понять, какой самый простой и эффективный способ сделать это.

Ответы [ 4 ]

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

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

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

Что касается основных данных, вы, вероятно, ошибаетесь, пытаясь сохранить информацию о состоянии пользовательского интерфейса (сколько фотографий в ячейке) в основных данных. Базовые данные не должны заботиться о количестве изображений в ячейке.

UITableViewCell

Чтобы использовать UITableView, вы должны создать массив, содержащий все ваши изображения. Затем вы можете определить, сколько строк вам нужно, разделив этот массив на количество изображений в строке.

Оттуда вы должны создать подкласс UITableViewCell и передать 4 изображения для этой ячейки для рисования. Тогда просто добавьте 4 UIImageView экземпляров в пользовательскую ячейку и настройте изображения.

UIScrollView

Для прокрутки вы создаете UIImageView для каждого изображения, а затем добавляете их в качестве подпредставлений UIScrollView. Затем вы должны установить рамки каждого UIImageView, чтобы они отображались в сетке.

Если вы обнаружите, что у вас больше изображений, чем вы можете удержать в памяти за один раз, то вам нужно будет разобраться с мозаикой, эффективно обращая внимание на то, где пользователь прокручивает и заполняет (перемещая закадровые представления изображений) перед край, который пользователь прокручивает в сторону. Это то же самое, что вы получаете эффективно бесплатно с UITableView через его очередь ячеек.

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

Я только что сделал это с UITableView - вы слишком продуманны с отношениями.

Для моего решения я создал подкласс UITableViewCell, в котором четыре свойства имеют свойства кнопок.

В моем методе cellForRowЯ выясняю, какие четыре изображения принадлежат этой строке, и затем устанавливаю соответствующее изображение для соответствующей кнопки.

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

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

1 голос
/ 18 ноября 2011

Я думаю, что очень хорошая реализация - AQGridView .

Она легко расширяется, имеет хорошее переупорядочение (см. Демонстрационный пример трамплина) и повторно использует ячейку.

Если вы когда-либо реализовывали TableViewDelegate, вы сможете использовать его.

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

Вы должны проверить просмотрщик фотографий Three20. Проект на github. Также есть хороший учебник для просмотра фотографий здесь

...