Рисование строки NSS против строки в виде чертежа NSBezierPath - PullRequest
2 голосов
/ 26 марта 2012

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

Теперь у меня возникают проблемы при преобразовании NSString объектов, в частности, при отражении их положения на виде: я использую категорию NSString (BezierConversions) из примера Apple SpeedometerView для преобразования строк впути Безье.

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

  • NSBezierPath и transformUsingAffineTransform: против
  • комбинация NSAffineTransform, примененная к представлению, и NSString drawAtPoint:

В моем тестовом проекте дажетривиальный регистр завершается неудачно:

Purple = NSString drawAtPoint, Grey = NSBezierPath fill

Серое представление Безье для строки, нарисованной с использованием:

NSAffineTransform *moveFinal = [NSAffineTransform transform];
[moveFinal translateXBy:x yBy:y];
[textBezier transformUsingAffineTransform:moveFinal];

и фиолетовой строки через

[testString drawAtPoint:NSMakePoint(x, y)
        withAttributes:attributes];

Те же атрибуты, те же позиции ввода, другое расположение в поле зрения.
И с повернутым текстом это только ухудшается.


ОБНОВЛЕНИЕ # 1

Похожеэто сводится к различным ограничивающим рамкам гвытравлено

  • NSString sizeWithAttributes:
  • NSBezierPath bounds

Теперь экспериментируем с NSString boundingRectWithSize

1 Ответ

0 голосов
/ 29 марта 2012

FWIW - работает сейчас.

Использование boundingRectWithSize:options:attributes: с опцией NSStringDrawingUsesDeviceMetrics дает некоторые хорошие размеры текста для работы, включая фактическую ограничивающую рамку, занятую строкой при рисовании, и смещение первого глифа.

Смещение NSBezierPath, возвращенного из bezierWithFont: на эту сумму, и все готово.

...