Почему для iPhone требуется кварцевое 2D-преобразование текста - PullRequest
5 голосов
/ 15 августа 2010

Из документов Apple:

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

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

1 Ответ

7 голосов
/ 15 августа 2010

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

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

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

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

...