iOS实现电子签名
本文实例为大家分享了iOS实现电子签名的具体代码,供大家参考,具体内容如下
实现原理
1、使用拖动手势记录获取用户签名路径.
2、当用户初次接触屏幕,生成一个新的UIBezierPath,并加入数组中.设置接触点为起点.在手指拖动过程中为UIBezierPath添加线条,并重新绘制,生成连续的线.
3、手指滑动中不断的重新绘制,形成签名效果.
4、签名完成,转化为UIImage保存.
classCXGSignView:UIView{
varpath:UIBezierPath?
varpathArray:[UIBezierPath]=[]
overrideinit(frame:CGRect){
super.init(frame:frame)
self.backgroundColor=UIColor.gray
setupSubviews()
}
requiredinit?(coderaDecoder:NSCoder){
fatalError("init(coder:)hasnotbeenimplemented")
}
funcsetupSubviews(){
letpanGestureRecognizer=UIPanGestureRecognizer(target:self,action:#selector(panGestureRecognizerAction(_:)))
self.addGestureRecognizer(panGestureRecognizer)
}
@objcfuncpanGestureRecognizerAction(_sender:UIPanGestureRecognizer){
//获取当前点
letcurrentPoint=sender.location(in:self)
ifsender.state==.began{
self.path=UIBezierPath()
path?.lineWidth=2
path?.move(to:currentPoint)
pathArray.append(path!)
}elseifsender.state==.changed{
path?.addLine(to:currentPoint)
}
self.setNeedsDisplay()
}
//根据UIBezierPath重新绘制
overridefuncdraw(_rect:CGRect){
forpathinpathArray{
//签名颜色
UIColor.black.set()
path.stroke()
}
}
//清空
funcclearSign(){
pathArray.removeAll()
self.setNeedsDisplay()
}
//撤销
funcundoSign(){
guardpathArray.count>0else{
return
}
pathArray.removeLast()
self.setNeedsDisplay()
}
///签名转化为图片
funcsaveSignToImage()->UIImage?{
UIGraphicsBeginImageContextWithOptions(self.bounds.size,false,UIScreen.main.scale)
guardletcontext=UIGraphicsGetCurrentContext()else{
returnnil
}
self.layer.render(in:context)
letimage=UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
returnimage
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。