Изменение координат CoreGraphics в верхний левый угол приводит к отображению ShowText в перевернутом виде

Я настроил CGContextPDF так, чтобы координаты (0,0) были вверху слева, а не внизу слева, используя следующее:

context.TranslateCTM(0, height);
context.ScaleCTM(1, -1);

Однако теперь, когда я вызываю ShowText, текст отображается в перевернутом виде. Я помню, как столкнулся с этой проблемой, используя MonoTouch для iOS, и исправление заключалось в том, чтобы сделать описанное выше, однако разница заключалась в том, что система координат UIKit уже запущена в верхнем левом углу.

Я пробовал перевернуть шкалу TextMatrix аналогичным образом как до, так и после выбора шрифта (если это имело значение), но, похоже, это не имело никакого эффекта.

Любые идеи?


person James    schedule 12.05.2013    source источник


Ответы (1)


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

context.TextMatrix = CGAffineTransform.MakeScale(1.0f, -1.0f);
context.TranslateCTM(0, height);
context.ScaleCTM(1.0f, -1.0f);

Но это не

context.TextMatrix.Scale(1.0f, -1.0f);
context.TranslateCTM(0, height);
context.ScaleCTM(1.0f, -1.0f);

Еще одним недостатком является то, что текст теперь всегда отображается вверх, а не вниз, поэтому вам всегда нужно переводить высоту текста, если вы хотите рисовать на (x, y), а не под < / сильный>.

person James    schedule 09.06.2013