Проверяет ли Quartz2D пересечение прямоугольника по линии перед его рисованием

Я рисую большую схему, состоящую из множества линий. Я делаю это в методе drawRect: из UIView. Схема больше, чем слой просмотра, и я проверяю каждую линию и рисую ее только в том случае, если она пересекает видимый прямоугольник. Но в один момент я подумал, а стоит ли мне это делать? Может быть, Quartz уже делает этот тест?

Итак, вопрос: когда я использую функцию CGContextAddLineToPoint(), Core Graphics проверяет эту линию на пересечение с прямоугольником слоя или просто рисует ее?


person ddnv    schedule 02.04.2010    source источник


Ответы (1)


Когда я использую функцию CGContextAddLineToPoint(), Core Graphics проверяет эту линию на пересечение с прямоугольником слоя или просто рисует ее?

Нет, это не будет подавлять lineto, потому что это всего лишь один сегмент в подпути. Подпуть может пересекать прямоугольник, даже если один из его сегментов линии этого не делает. Вы можете рисовать только одну линию для каждого подпути, но Quartz не знает об этом, пока вы не moveto для нового подпути.

Что касается вы проверки пересечения линий прямоугольника, документация гласит:

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

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

person Peter Hosey    schedule 03.04.2010