Улучшение NSBezierPath, представляющего времена
Если Вы используете объект NSBezierPath нарисовать пути в приложении Какао, и Вы как не интересуетесь абсолютной правильностью представленных путей, существуют способы ускорить времена рендеринга для сложных контуров. До рендеринга объекта NSBezierPath Базовый Графический механизм ищет путь любые линейные сегменты пересечения. Для каждого пересечения это находит, механизм тогда растеризирует линейный стык согласно выбранным настройкам. Если объект NSBezierPath содержит большое количество пересекающихся линейных сегментов, стоимость этих операций может стать значительной. Если Вам не нужны эти пересечения, которые будут представлены точно, Вы могли бы попытаться добавить меньше линейных сегментов к своим объектам NSBezierPath до рендеринга.
При рисовании многих прямоугольников Вы могли бы хотеть избегать использования NSBezierPath в целом. NSBezierPath содержит удобный метод strokeRect:
для рисования прямоугольников. Однако путь, создаваемый этим методом, состоит из четырех пересекающихся линейных сегментов с должным образом представленными углами. Если Вам не нужен прямоугольник, который будет нарисован так точно, Вы могли бы хотеть использовать NSFrameRect
семья функций вместо этого. Эти функции привлекают стороны прямоугольника с помощью четырех линий непересечения, которые могут быть проведены намного быстрее. NSFrameRect
семья функций состоит из следующих функций, объявленных в NSGraphics.h
.
void NSFrameRect(NSRect aRect); |
void NSFrameRectWithWidth(NSRect aRect, float frameWidth); |
void NSFrameRectWithWidthUsingOperation(NSRect aRect, float frameWidth, NSCompositingOperation op); |
Следует иметь в виду, что использование этих методов включает компромисс правильности по сравнению с эффективностью. Вы не должны делать этот компромисс, если Вы не пытаетесь решить проблему реального исполнения.