CATiledLayer изменяет изображения с различными размерами при масштабировании (Карта связана :) - PullRequest
2 голосов
/ 26 июня 2010

У меня есть UIScrollView с UIView, который в свою очередь содержит CATiledLayer, который отображает карту.

Я должен начать с обзора, где можно ОЧЕНЬ увеличить масштаб.Таким образом, я сделал 4 разных изображения (фактически PDF-файлы) с 4 разными размерами карты (самое большое имеет размер около 5700 x 6700px)

Я добавляю самое маленькое (обзор) к CATiledLayer, а затем меняю изображения наопределенные уровни масштабирования.

Пока что это вроде работает.

Проблема в том, что когда я отображаю самую большую карту (ближайший масштаб), плитки становятся ОЧЕНЬ большими, и для их рисования требуются годы.их (и в зависимости от уровней детализации / смещения приложение выдает в память предупреждение о сбоях).

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

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

Есть идеи, как мне это решить?;)

Спасибо за любую помощь ...

Редактировать:

Сейчас я пытаюсь определить два отдельных CATiledLayers, а затем поменять их местами, когда определенный уровень масштабированияДостигнута - но это приводит к сбою приложения?

[myContentView.layer replaceSublayer: tiledLayer with: tiledLayerBig];

о боже ...:)

Edit2:

Хорошо - все заработало - более или менее.Единственное, что происходит сейчас, это то, что CATiledLayer ведет себя странно, когда я добавляю самое большое изображение.Некоторое время он работает нормально, но когда рисуется определенное количество плиток, я получаю предупреждение о памяти, и приложение в конечном итоге вылетает.Я действительно ожидал бы, что невидимые плитки будут удалены, когда они покинут область просмотра.Похоже, этого не происходит, так что в конечном итоге все плитки будут прорисованы, что кажется слишком большим для памяти iPhone ...: (

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 14 июля 2011

Похоже, что плитки, которые больше не используются, не высвобождаются из памяти. Что означает

вашего пользовательского переопределения
- (void)drawRect:(CGRect)rect method

как выглядит?

...