Как использовать CoreText в MonoTouch для написания повернутого текста?

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

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

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

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

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


person Emanuele Sabetta    schedule 17.10.2011    source источник


Ответы (2)


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

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

person poupou    schedule 21.10.2011
comment
Спасибо, это именно то, что я искал! - person Emanuele Sabetta; 22.10.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
}
person cocoahero    schedule 17.10.2011
comment
Спасибо, но ваш код не работает в MonoTouch. Я попытался преобразовать его, но для многих значений нет эквивалентных параметров (т.е. что в монотач h/10?) - person Emanuele Sabetta; 18.10.2011