Масштабирование и прокрутка больших изображений в UIScrollView - PullRequest
4 голосов
/ 06 сентября 2011

Я застрял в этом довольно долгое время.Я посмотрел на многие другие ответы, а также на примеры Apple.

Что я хочу знать, так это то, как я могу загружать большие изображения в UIScrollView, просматривать их и увеличивать их,как приложение «Фото».

Я работаю над приложением, в котором мне нужно прокручивать большие изображения (по большому счету я имею в виду изображения размером более 1024 x 1024).Я уже реализовал нечто похожее на то, что делает приложение для фотографий.Однако теперь, когда я использую большие изображения, я получаю предупреждения памяти и прочее.Я знаю, почему я получаю предупреждение, и я знаю, что мне нужно Плитка изображений .

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

Мне нужно что-то, в чем я могу разложить полноразмерные изображения.Любая помощь будет оценена.Кроме того, как я упоминал ранее, я знаю, что должен что-то делать с Tiling.Тем не менее, я новичок в этом, и я был бы очень признателен, если бы ответы содержали некоторый пример кода, который я могу использовать в качестве начальной точки.мне ответили на мое удовлетворение, поэтому я снова задаю этот вопрос.

Еще раз спасибо!

1 Ответ

3 голосов
/ 06 сентября 2011

Для работы с плиткой вам нужно использовать CaTiledLayer в вашем представлении.Поиск в Google даст вам хорошую информацию.По сути, вы заявляете, что UIVIew использует его, объявляете некоторые уровни детализации для масштабирования, и в drawRect вы получите каждую плитку в качестве параметра rect.

Чтобы создать плитку изображения, загрузите в UIImageпамяти, но гораздо меньше, чем показывать) и использовать для каждой плитки, которую вы хотите что-то вроде:

UIGraphicsBeginImageContextWithOptions(tileSize, YES, 1);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, -tileSize.width * columnNumber, -tileSize.height*rowNumber);
[img drawInRect:CGRectMake(0, 0, tileSize.width, tileSize.height)];
UIImage* imgCut = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

и сохранить imgCut.Возможно, вы захотите сгенерировать мозаику с разными масштабами, если вы используете другой уровень детализации в CATiledLayer.

...