我正在尝试通过以下示例应用程序来了解CoreText
http://docs.xamarin.com/recipes/ios/graphics_and_drawing/core_text/draw_unicode_text_with_coretext/
作为测试,我想在视图中的视图上写“N”,“E”,“S”和“W”。
各自的职位。但是只有第一个(“N”)被绘制。
这是我的TextDrawingView.cs版本:
using System;
using System.Drawing;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
using MonoTouch.CoreText;
using MonoTouch.CoreGraphics;
namespace CoreTextDrawing
{
public class TextDrawingView : UIView
{
public TextDrawingView ()
{
}
//based upon docs.xamarin.com/recipes/ios/graphics_and_drawing/\
// core_text/draw_unicode_text_with_coretext/
public override void Draw (RectangleF rect)
{
base.Draw (rect);
var gctx = UIGraphics.GetCurrentContext ();
gctx.SetFillColor (UIColor.Green.CGColor);
DrawText ("N", Bounds.Width / 2, Bounds.Height / 4, gctx);
DrawText ("W", Bounds.Width / 4, Bounds.Height / 2, gctx);
DrawText ("E", Bounds.Width / 4 * 3, Bounds.Height / 2, gctx);
DrawText ("S", Bounds.Width / 2, Bounds.Height / 4 * 3, gctx);
}
private void DrawText (string t, float x, float y, CGContext gctx)
{
gctx.TranslateCTM (x, y);
gctx.ScaleCTM (1, -1);
var attributedString = new NSAttributedString (t,
new CTStringAttributes {
ForegroundColorFromContext = true,
Font = new CTFont ("Arial", 24)
});
using (var textLine = new CTLine (attributedString)) {
textLine.Draw (gctx);
}
}
}
}
我不知道为什么只画'N'。 4个DrawText的每个
如果它们是唯一的调用,则可以正常工作。
我似乎缺乏一些基本的了解。
基本上我想在特定坐标上画一些字母
屏幕,但无法理解如何实现。
有帮助吗?
TIA,
圭多
最佳答案
您需要在DrawText方法的开头和结尾处保存和还原上下文状态。
gctx.SaveState();
...
Transformations
DrawText
...
gctx.RestoreState();