Проверяет ли Quartz2D пересечение прямоугольника за линией перед его рисованием - PullRequest
1 голос
/ 02 апреля 2010

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

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

1 Ответ

0 голосов
/ 04 апреля 2010

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

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

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

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

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

...