2009-07-20 5 views
1

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

Так что мой вопрос: эффективен ли это?

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

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

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

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

ответ

3

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

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

Смежные вопросы