Какой самый эффективный способ нарисовать большой CGPath? - PullRequest
1 голос
/ 21 июля 2009

Хорошо, у меня есть UIView, который отображает CGPath, который довольно широк. Его можно прокрутить в пределах UIScrollView по горизонтали. Прямо сейчас у меня есть представление с использованием CATiledLayer, потому что его ширина превышает 1024 пикселя.

Итак, мой вопрос: это эффективно?

- (void) drawRect:(CGRect)rect {
    CGContextRef g = UIGraphicsGetCurrentContext();
    CGContextAddPath(g,path);
    CGContextSetStrokeColor(g,color);
    CGContextDrawPath(g,kCGPathStroke);
}

По сути, я рисую весь путь каждый раз, когда рисуется плитка в слое. Кто-нибудь знает, является ли это плохой идеей, или CGContext относительно умен, только рисуя части пути, которые находятся внутри прямоугольника отсечения?

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

Стоит ли двигаться в этом направлении, или CGPath уже рисует относительно быстро?

1 Ответ

3 голосов
/ 21 июля 2009

По необходимости Кварц должен обрезать все, что рисует, в соответствии с размерами CGContext, в который он рисует. Но он все равно сохранит CPU, если вы отправите ему только геометрию, которая видна внутри этой плитки. Если вы делаете это, подготавливая несколько контуров, по одному на плитку, вы говорите о том, чтобы сделать это обрезание один раз (когда вы создаете несколько путей), а Quartz это делает каждый раз, когда вы рисуете плитку. Повышение эффективности будет зависеть от того, насколько сложен ваш путь: если это несколько простых фигур, ничего страшного; если это векторная карта национальной дорожной сети, то она может быть огромной! Конечно, вы должны компенсировать это ускорение против повышенной сложности вашего кода.

Что вы можете сделать, это использовать инструменты, чтобы увидеть, сколько времени тратится в Кварце, прежде чем вы сходите с ума, оптимизируя вещи.

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