微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MonoTouch:自定义绘图文本始终会绘制翻转文本

如何解决MonoTouch:自定义绘图文本始终会绘制翻转文本

| 在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

解决方法

由于CoreGraphics的坐标系与UIKit的坐标系不同,因此图像被翻转了,您需要应用一种转换,包括围绕渲染翻转(按x = 1,y = -1缩放),然后按高度(x = 0,y =高度)。 您可以通过将转换应用于图形上下文来完成此操作。,这是有效的代码:
        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。,
using (CGContext g = UIGraphics.GetCurrentContext()) {
            g.ScaleCTM (1f,-1f);
            g.TranslateCTM (0,-Bounds.Height);
               ....
,这段代码可以正常工作:
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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。