使用ShowTextAtPoint翻转显示的文本

时间:2011-03-11 13:06:27

标签: xamarin.ios

我正在使用CGContext的ShowTextAtPoint方法在视图中显示文本,但它以翻转模式显示,有谁知道如何解决这个问题? 这是我使用的代码:

ctx.SelectFont("Arial", 16f, CGTextEncoding.MacRoman); 
ctx.SetRGBFillColor(0f, 0f, 1f, 1f);
ctx.SetTextDrawingMode(CGTextDrawingMode.Fill);
ctx.ShowTextAtPoint(centerX, centerY, text);

2 个答案:

答案 0 :(得分:1)

您可以在图形上下文中操作当前变换矩阵,使用ScaleCTM和TranslateCTM将其翻转。

答案 1 :(得分:0)

根据Quartz 2D Programming Guide - Text

  

在iOS中,必须将变换应用于当前图形上下文,以便将文本定向,如图16-1所示。此变换反转y轴将原点转换为屏幕底部。清单16-2显示了如何在iOS视图的drawRect:方法中应用此类转换。然后,此方法调用清单16-1中的相同MyDrawText方法以获得相同的结果。

MonoTouch的外观:

public void DrawText(string text, float x, float y)
{
    // the incomming coordinates are origin top left
    y = Bounds.Height-y;

    // push context
    CGContext c = UIGraphics.GetCurrentContext();
    c.SaveState();

    // This technique requires inversion of the screen coordinates
    // for ShowTextAtPoint
    c.TranslateCTM(0, Bounds.Height);
    c.ScaleCTM(1,-1);

    // for debug purposes, draw crosshairs at the proper location
    DrawMarker(x,y);

    // Set the font drawing parameters
    c.SelectFont("Helvetica-Bold", 12.0f, CGTextEncoding.MacRoman);
    c.SetTextDrawingMode(CGTextDrawingMode.Fill);
    c.SetFillColor(1,1,1,1);

    // Draw the text
    c.ShowTextAtPoint( x, y, text );

    // Restore context
    c.RestoreState();
}

一个小的效用函数,用于在所需的点绘制十字准线:

public void DrawMarker(float x, float y)
{
    float SZ = 20;

    CGContext c = UIGraphics.GetCurrentContext();

    c.BeginPath();
    c.AddLines( new [] { new PointF(x-SZ,y), new PointF(x+SZ,y) });
    c.AddLines( new [] { new PointF(x,y-SZ), new PointF(x,y+SZ) });
    c.StrokePath();
}