Как использовать CoreText в MonoTouch для записи повернутого текста? - PullRequest
2 голосов
/ 17 октября 2011

Мне нужно написать текст, повернутый на 90 градусов. Я впервые попробовал с UILabel повернутым с CGAffineTransform:

this.myLabel.Center = this.myLabel.Frame.Location;
this.myLabel.Transform = CGAffineTransform.MakeRotation (-(float)Math.PI / 2.0f);

Он повернулся как раз правильно, но шрифты теперь выглядят размытыми и трудными для чтения.

Есть ли способ использовать библиотеку CoreText для простого поворота текста в UILabel, который не выглядит размытым?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

Если вы пропустили это, Xamarin предоставляет образец на github, который использует CoreText для рисования (не повернутого) текста.

Так как текст заканчивается как путь, не должно быть трудно вращать весь текст. OTOH CoreText намного сложнее, чем старый API - это цена, которую нужно заплатить, чтобы получить (намного) больший контроль.

1 голос
/ 17 октября 2011

Вы можете использовать Core Graphics. Это немного запутанно, но сработает.

Образец будет:

void MyDrawText (CGContextRef myContext, CGRect contextRect) // 1
{
float w, h;
w = contextRect.size.width;
h = contextRect.size.height;

CGAffineTransform myTextTransform; // 2
CGContextSelectFont (myContext, // 3
                "Helvetica-Bold",
                 h/10,
                 kCGEncodingMacRoman);
CGContextSetCharacterSpacing (myContext, 10); // 4
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke); // 5

CGContextSetRGBFillColor (myContext, 0, 1, 0, .5); // 6
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1); // 7
myTextTransform =  CGAffineTransformMakeRotation  (myRadianRotation); // 8
CGContextSetTextMatrix (myContext, myTextTransform); // 9
CGContextShowTextAtPoint (myContext, 40, 0, "Quartz 2D", 9); // 10
}
...