MonoTouch:自定义绘图文本总是绘制翻转文本

时间:2011-04-19 02:07:25

标签: xamarin.ios

在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");



    }

}

这是此代码的输出: enter image description here

为什么要翻转文字?

我正在跑步: MonoDevelop 2.4.2 iPhone模拟器4.2 MonoTouch 3.2.6

您可以从以下链接下载项目以重现此问题:www.grbytes.com/downloads/TextProblem.zip

4 个答案:

答案 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。