Какой алгоритм следует использовать, чтобы решить, какие строки перерисовать при обновлении экрана? - PullRequest
2 голосов
/ 27 декабря 2011

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

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

и нарисуйте текущую, которая рисуется при перемещении касания.

Теперь я знаю, что это НЕ ВСЕ хорошее решение и потребляет много оперативной памяти при увеличении размера массива. Мой массив уже будет содержать избыточные пути, которые на самом деле пересекают точки, которые уже окрашены в один и тот же цвет, и излишне будут тратить время процессора на его повторное выполнение и память.

Кто-нибудь может обратиться к лучшему алгоритму экономии ресурсов?

Ответы [ 3 ]

5 голосов
/ 27 декабря 2011

Не думайте, что у вас проблемы с памятью, пока вы не измерите свое приложение в разделе «Инструменты» и не увидите, что это так.В противном случае вы могли бы в конечном итоге приложить немало усилий, чтобы получить мало пользы.

1 голос
/ 27 декабря 2011

Лучшим способом было бы работать с графическим контекстом слоя. Для рисования новых путей просто избегайте очистки текущего графического контекста перед рисованием. Таким образом, вы можете наложить новую ничью поверх текущей. Для стирания просто ясно, рисуя в контексте с kCGBlendModeClear blendMode.

0 голосов
/ 27 декабря 2011

RAM не будет вашей проблемой.Решив эту проблему совсем недавно, я могу вам сказать, что перерисовка всех путей снова начнет облагать процессор нагрузкой через некоторое время.Способ, которым я решил это, состоял в том, чтобы "растеризовать" пути к изображению и просто нарисовать изображение с самым новым путем на нем.Кажется, это хорошо работает для любого числа путей и хорошо масштабируется, поскольку размер изображения действительно не изменяется (размер экрана).

Дайте мне знать, если вам нужен конкретный пример кода.

...