2010-08-15 3 views
5
From the Apple docs:

Почему Quartz 2D текст флип преобразования требуется на iPhone

В прошивкой, необходимо применить флип преобразования для текущего графического контекста для того, чтобы текст, который будет ориентирована как показано на рисунке 16-1. [Флип-преобразование] включает инвертирование оси y и перевод начальной точки в нижнюю часть экрана. В листинге 16-2 показано, как применять такие преобразования в методе представления iOS drawRect:. Затем этот метод вызывает тот же метод MyDrawText из листинга 16-1.

Почему? Это кажется совершенно неприятным.

ответ

7

Как я расширяю в this answer, система координат кварца 2D использует нижний левый угол как (0,0), что совпадает с системой координат окна на Mac. IPhone использует верхний левый угол как (0,0) для его макета представления, поэтому слои, которые возвращают UIViews, имеют свою систему координат, перевернутую вокруг оси Y.

Если вы используете расширения NSString UIKit для рисования текста в слой подложки для UIView, он будет правильно ориентирован, потому что это переворачивание учитывается. Однако, если вы используете текстовый чертеж нижнего уровня, вам нужно сначала перевернуть систему координат вокруг оси Y (так, чтобы 0,0 снова был слева внизу), чтобы правильно ориентировать предметы.

Контексты Normal Core Graphics (используемые для рисования изображений или PDF-файлов для хранения или отображения) не инвертируются, поэтому выполняется обратное. Обычный текст кварца будет выдаваться отлично, но материал, нарисованный с использованием расширений UIKit NSString, должен сначала иметь инвертированную систему координат. Это вызывает много путаницы среди разработчиков, чьи образы и текст выглядят правильно при рисовании на экране, но в случае их сохранения на диск заканчиваются вверх дном.

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

+0

хороший ответ brad .... +1 :) –

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

  • Нет связанных вопросов^_^