如何在MonoTouch中使用CoreText来编写旋转文本?

时间:2011-10-17 18:13:19

标签: ios xamarin.ios rotation uilabel core-text

我需要写一些旋转90度的文字。我首先尝试使用CGAffineTransform旋转的UILabel:

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

它旋转得恰到好处,但字体现在看起来很模糊,难以阅读。

有没有办法使用CoreText库在UILabel中进行简单的文本旋转,看起来不模糊?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

如果你错过了它,Xamarin在github上提供sample,使用CoreText绘制(非旋转)文本。

由于文本最终成为路径,因此旋转整个文本并不困难。 OTOH CoreText比旧版API复杂得多 - 这是获得(控制)更多控制权的代价。

答案 1 :(得分:1)

您可以使用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
}