Нарисуйте большое количество путей в drawRect

Каков оптимальный способ визуализации большого числа путей < 512 в drawRect представления?

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

Создание и рисование всех этих сегментов как BezierPath или нескольких bezierPaths не достаточно быстро.

Я читал, что CGLayers можно использовать и визуализировать в целевой UIView.

После настройки слоя из контекста представлений и записи в слой в другом месте со своим собственным контекстом слой можно перетащить в представление с

CGContextDrawLayerAtPoint(context, point, layer);

Если что-то постоянно рисует в слое, когда оно должно уведомить UIView с помощью setNeedsDisplay и можно ли их синхронизировать? например, без отправки setNeedsDisplay в основной поток (это не правильно).

Каков наилучший способ визуализации такого количества путей / линий в слое после выполнения этой оптимизации?

1 ответ

Если вы хотите быть очень быстрым, используйте OpenGL ES;) В противном случае есть несколько общих соображений:

  1. Сделайте как можно меньше дублирующих работ. Например, если есть 200 фоновых полигонов, которые остаются неизменными между визуализациями, визуализируйте их в UIImage и нарисуйте этот UIImage в начале вашего -drawRect метода. Избегайте таких вещей, как if(array.count < 3) { y += array.count } else { y += 3 } так как int array_count = array.count; if(array_count < 3) { y += array_count } else { y += 3 } быстрее! Хорошо, в этом случае нет большой разницы, но во многих случаях такие вещи имеют значение! Избегайте создания слишком большого количества объектов во внутренних циклах.
  2. Используйте CADisplayLink.
  3. Профилируйте свой код, чтобы увидеть узкие места. Они в коде чертежа или в коде, который вычисляет полигоны?
Другие вопросы по тегам