Xamarin.iOS应用程序中的手指绘图(C#) [英] Finger drawing in Xamarin.iOS App (C#)
本文介绍了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屋!
查看全文