Xamarin.iOS应用程序中的手指绘图(C#) [英] Finger drawing in Xamarin.iOS App (C#)

查看:193
本文介绍了Xamarin.iOS应用程序中的手指绘图(C#)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我制作了一个应用,用户可以用手指画出一些东西......
我不知道怎么做...

I make an app where the user can draw something with his fingers... I have no idea how I can do this...

经过研究,我找到了下面的代码。

After research I found the code below.

但是这个代码我只能画一行。如果我触摸结束并且新的触摸事件开始,则该线继续此点...旧线自动连接到新线。

But with this code I can only draw one line. If I the touch ended and a new touch event begins the line continue on this point... The old line connect automaticly to the new one.

所以我想创建每次触摸都有一条新线。

So I want to create a new line on each touch.

有人知道这是如何运作的吗?

Does someone know how this is working?

代码

    CGPath path;
    CGPoint initialPoint;
    CGPoint latestPoint;

    public DrawView (IntPtr handle) : base (handle)
    {
        BackgroundColor = UIColor.White;

        path = new CGPath();
    }

    public override void TouchesBegan(NSSet touches, UIEvent evt)
    {
        base.TouchesBegan(touches, evt);

        UITouch touch = touches.AnyObject as UITouch;

        if (touch != null)
        {
            initialPoint = touch.LocationInView(this);
        }
    }

    public override void TouchesMoved(NSSet touches, UIEvent evt)
    {
        base.TouchesMoved(touches, evt);

        UITouch touch = touches.AnyObject as UITouch;

        if (touch != null)
        {
            latestPoint = touch.LocationInView(this);
            SetNeedsDisplay();
        }
    }

    public override void Draw(CGRect rect)
    {
        base.Draw(rect);

        if (!initialPoint.IsEmpty)
        {

            //get graphics context
            using (CGContext g = UIGraphics.GetCurrentContext())
            {
                //set up drawing attributes
                g.SetLineWidth(2);
                UIColor.Black.SetStroke();

                //add lines to the touch points
                if (path.IsEmpty)
                {
                    path.AddLines(new CGPoint[] { initialPoint, latestPoint });
                }
                else
                {
                    path.AddLineToPoint(latestPoint);
                }

                //add geometry to graphics context and draw it
                g.AddPath(path);

                g.DrawPath(CGPathDrawingMode.Stroke);
            }
        }
    }


推荐答案

您可以创建额外的 CGPath 来记录路径并使用 CGContext

You can create a extra CGPath to record the paths and draw them with CGContext

代码:

public partial class DrawLine : UIView
{

    CGPath pathtotal;
    CGPath path;

    CGPoint initialPoint;
    CGPoint latestPoint;
    public DrawLine(IntPtr handle) : base(handle)
    {
        BackgroundColor = UIColor.White;
        pathtotal = new CGPath();
    }
    public override void TouchesBegan(NSSet touches, UIEvent evt)
    {
        base.TouchesBegan(touches, evt);
        path = new CGPath();
        UITouch touch = touches.AnyObject as UITouch;

        if (touch != null)
        {
            initialPoint = touch.LocationInView(this);
        }
    }

    public override void TouchesMoved(NSSet touches, UIEvent evt)
    {
        base.TouchesMoved(touches, evt);

        UITouch touch = touches.AnyObject as UITouch;

        if (touch != null)
        {
            latestPoint = touch.LocationInView(this);
            SetNeedsDisplay();
        }
    }

    public override void Draw(CGRect rect)
    {
        base.Draw(rect);

        if (!initialPoint.IsEmpty)
        {

            //get graphics context
            using (CGContext g = UIGraphics.GetCurrentContext())
            {
                //set up drawing attributes
                g.SetLineWidth(2);
                UIColor.Black.SetStroke();

                //add lines to the touch points
                if (path.IsEmpty)
                {
                    path.AddLines(new CGPoint[] { initialPoint, latestPoint });
                }
                else
                {
                    path.AddLineToPoint(latestPoint);
                }

                //add geometry to graphics context and draw it
                pathtotal.AddPath(path);

                g.AddPath(pathtotal);
                g.DrawPath(CGPathDrawingMode.Stroke);
            }
        }
    }
}

测试结果:

这篇关于Xamarin.iOS应用程序中的手指绘图(C#)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆