Очевидным механизмом будет UIScrollView. Это объект, предназначенный для отображения изображения или группы изображений, которые больше экрана, и он имеет легко реализуемую функциональность для масштабирования и прокрутки.
Хороший учебник вы найдете в Руководстве по программированию Apple Scroll View для iOS .
Вам просто нужно
- создать новый вид прокрутки
- присвойте свойству
contentSize
общий размер очень большого изображения, которое вы хотите отобразить
- добавьте одно большое изображение в качестве подпредставления или добавьте все маленькие изображения, расположив их соответствующим образом, чтобы они соответствовали друг другу
Если вы хотите создать одно большое изображение, вы можете просто создать большое настраиваемое представление того же размера, что и представление прокрутки contentSize
. Затем нарисуйте каждое изображение в отдельной сетке. Наконец, добавьте этот большой пользовательский вид как подпредставление вида прокрутки.
Это очевидное решение, но оно может сделать все, что вам нужно, и предоставить вам дополнительную функциональность.
Редактировать: Представление прокрутки может быть хорошей отправной точкой, но вы все равно можете столкнуться с ограничениями памяти. Поиск ответов на вопросы о том, как повысить эффективность прокрутки, может оказаться полезным. Вы можете найти некоторые хорошие идеи в этом связанном вопросе: ScrollView не хватает памяти, когда он становится слишком большим
Редактировать 2: Способ управления памятью подробно, код и все, в вышеупомянутом руководстве. Взгляните на третий пример демонстрации ScrollViewSuite , посвященный плитке. Это должно работать идеально для вас, так как ваше изображение уже состоит из плиток.
Идея состоит в том, чтобы сделать вид таблицы из вида прокрутки, который теперь перерабатывает плитки изображений вместо ячеек. Представление прокрутки разделено на подклассы, и набор многократно используемых плиток сохраняется как одна из переменных его экземпляра. Ключом к реализации в layoutSubviews
является удаление из суперпредставления плиток, которые переместились за пределы видимой области, затем утилизация плиток для вновь видимого содержимого и добавление их в качестве подпредставления. Таким образом, в память загружаются только видимые плитки.
Надеюсь, это работает для вас.