在UIView子类中,我重写Draw子画面来绘制一些自定义文本,但是文本总是以翻转文本的形式绘制。
这是我正在使用的代码:
class TextViewProblem : UIView
{
public override void Draw (RectangleF rect)
{
base.Draw (rect);
CGContext g = UIGraphics.GetCurrentContext();
UIColor.White.SetFill();
g.SelectFont("Arial",16f,CGTextEncoding.MacRoman);
UIColor.White.SetFill();
g.SetTextDrawingMode(CGTextDrawingMode.Fill);
g.ShowTextAtPoint(1,25,"Yiannis 123");
}
}
这是此代码的输出:
为什么要翻转文字?
我正在跑步: MonoDevelop 2.4.2 iPhone模拟器4.2 MonoTouch 3.2.6
您可以从以下链接下载项目以重现此问题:www.grbytes.com/downloads/TextProblem.zip
答案 0 :(得分:10)
由于CoreGraphics的坐标系与UIKit的坐标系不同,因此需要翻转图像,需要应用包含翻转渲染的变换(按x = 1,y = -1进行缩放),然后通过高度(x = 0,y =高度)。
您可以通过将转换应用于图形上下文来完成此操作。
答案 1 :(得分:1)
以下代码有效:
CGContext g = UIGraphics.GetCurrentContext();
UIColor.White.SetFill();
g.ScaleCTM(1f,-1f);
g.SelectFont("Arial",16f,CGTextEncoding.MacRoman);
UIColor.White.SetFill();
g.SetTextDrawingMode(CGTextDrawingMode.Fill);
g.ShowTextAtPoint(1,-50,"Yiannis 123");
为Y设置比例为-1后,现在您的坐标系是倒置的。所以(0,0)是左上角,但是左下角现在是(0,-480),而不是(0,480)。请注意ShowTextAtPoint
中的-50。
答案 2 :(得分:1)
using (CGContext g = UIGraphics.GetCurrentContext()) {
g.ScaleCTM (1f, -1f);
g.TranslateCTM (0, -Bounds.Height);
....
答案 3 :(得分:-1)
此代码可以正常工作:
public override void Draw (System.Drawing.RectangleF rect)
{
base.Draw (rect);
CGContext g = UIGraphics.GetCurrentContext();
g.TranslateCTM(0,Bounds.Height);
g.ScaleCTM(1f,-1f);
g.DrawImage ..........
}
提示是:首先是TranslateCTM,然后是ScaleCTM。