这只是一个简单的问题,因为我在谷歌上搜索并只找到了已经具有此功能的应用程序 - 但我如何着手创建一个能够捕获电子签名的应用程序......这可能吗?
Xamarin 的组件商店有一个签名板执行此操作的组件。
我也从头开始写过类似的东西 - 这并不是特别困难。代码看起来像这样:
public class DrawView : UIView
{
DrawViewController dvc;
// clear the canvas
public void Clear ()
{
drawPath.Dispose ();
drawPath = new CGPath ();
fingerDraw = false;
SetNeedsDisplay ();
}
// pass in a reference to the controller, although I never use it
and could probably remove it
public DrawView (RectangleF frame, DrawViewController root) :
base(frame)
{
dvc = root;
this.drawPath = new CGPath ();
this.BackgroundColor = UIColor.White;
}
private PointF touchLocation;
private PointF prevTouchLocation;
private CGPath drawPath;
private bool fingerDraw;
public override void TouchesBegan (MonoTouch.Foundation.NSSet
touches, UIEvent evt)
{
base.TouchesBegan (touches, evt);
UITouch touch = touches.AnyObject as UITouch;
this.fingerDraw = true;
this.touchLocation = touch.LocationInView (this);
this.prevTouchLocation = touch.PreviousLocationInView (this);
this.SetNeedsDisplay ();
}
public override void TouchesMoved (MonoTouch.Foundation.NSSet
touches, UIEvent evt)
{
base.TouchesMoved (touches, evt);
UITouch touch = touches.AnyObject as UITouch;
this.touchLocation = touch.LocationInView (this);
this.prevTouchLocation = touch.PreviousLocationInView (this);
this.SetNeedsDisplay ();
}
public UIImage GetDrawingImage ()
{
UIImage returnImg = null;
UIGraphics.BeginImageContext (this.Bounds.Size);
using (CGContext context = UIGraphics.GetCurrentContext()) {
context.SetStrokeColor (UIColor.Black.CGColor);
context.SetLineWidth (5f);
context.SetLineJoin (CGLineJoin.Round);
context.SetLineCap (CGLineCap.Round);
context.AddPath (this.drawPath);
context.DrawPath (CGPathDrawingMode.Stroke);
returnImg = UIGraphics.GetImageFromCurrentImageContext ();
}
UIGraphics.EndImageContext ();
return returnImg;
}
public override void Draw (RectangleF rect)
{
base.Draw (rect);
if (this.fingerDraw) {
using (CGContext context = UIGraphics.GetCurrentContext()) {
context.SetStrokeColor (UIColor.Black.CGColor);
context.SetLineWidth (5f);
context.SetLineJoin (CGLineJoin.Round);
context.SetLineCap (CGLineCap.Round);
this.drawPath.MoveToPoint (this.prevTouchLocation);
this.drawPath.AddLineToPoint (this.touchLocation);
context.AddPath (this.drawPath);
context.DrawPath (CGPathDrawingMode.Stroke);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)