我正在使用CGContext的ShowTextAtPoint方法在视图中显示文本,但它以翻转模式显示,有谁知道如何解决这个问题? 这是我使用的代码:
ctx.SelectFont("Arial", 16f, CGTextEncoding.MacRoman);
ctx.SetRGBFillColor(0f, 0f, 1f, 1f);
ctx.SetTextDrawingMode(CGTextDrawingMode.Fill);
ctx.ShowTextAtPoint(centerX, centerY, text);
答案 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();
}