Проблема с drawRect и огромным видом - PullRequest
1 голос
/ 20 мая 2011

У меня есть вид, который перекрывает CATiledlayer. Вид где-то в районе 10 000x8 000

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

В методе drawRect я просто пытаюсь нарисовать линию между несколькими точками на карте.

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

10000 * 8000 - это огромный обзор, поэтому неудивительно, что у вас возникают проблемы с памятью.Он будет работать в симуляторе, потому что у вас гораздо больше памяти на вашем компьютере, но, чтобы дать вам представление о худшем случае, полное пространство буфера RGBA такого размера займет 10000 *8000* 4 байта или около 305 МБ!

Какой ваш код внутри метода?Если вы хотите, чтобы что-то реалистичное выглядело так широко, вам, вероятно, придется делать вещи совсем по-другому.В этом случае ваш вид должен быть только размером экрана (320 * 480 на телефоне), и вы делаете прямоугольник, представляющий ваш мир (10000 * 8000), и еще один прямоугольник, представляющий ваш вид.Затем нарисуйте линии на основе их относительного положения в мировом пространстве к пространству просмотра.

2 голосов
/ 20 мая 2011

Используйте другой CATiledLayer для поддержки вашего оверлея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...