我正在尝试通过以下示例应用程序来了解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();

09-27 04:25