iOS实现电子签名

这篇文章主要为大家详细介绍了iOS实现电子签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了iOS实现电子签名的具体代码,供大家参考,具体内容如下

实现原理

1、使用拖动手势记录获取用户签名路径.
2、当用户初次接触屏幕,生成一个新的UIBezierPath,并加入数组中.设置接触点为起点.在手指拖动过程中为UIBezierPath添加线条,并重新绘制,生成连续的线.
3、手指滑动中不断的重新绘制,形成签名效果.
4、签名完成,转化为UIImage保存.

class CXGSignView: UIView {

 var path: UIBezierPath?
 var pathArray: [UIBezierPath] = []

 override init(frame: CGRect) {
 super.init(frame: frame)
 self.backgroundColor = UIColor.gray
 setupSubviews()
 }


 required init?(coder aDecoder: NSCoder) {
 fatalError("init(coder:) has not been implemented")
 }


 func setupSubviews() {

 let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(panGestureRecognizerAction(_:)))
 self.addGestureRecognizer(panGestureRecognizer)

 }

 @objc func panGestureRecognizerAction(_ sender: UIPanGestureRecognizer) {
 // 获取当前点
 let currentPoint = sender.location(in: self)

 if sender.state == .began {
 self.path = UIBezierPath()
 path?.lineWidth = 2
 path?.move(to: currentPoint)
 pathArray.append(path!)
 }else if sender.state == .changed {
 path?.addLine(to: currentPoint)
 }
 self.setNeedsDisplay()
 }

 // 根据 UIBezierPath 重新绘制
 override func draw(_ rect: CGRect) {

 for path in pathArray {
 // 签名颜色
 UIColor.black.set()
 path.stroke()
 }
 }

 // 清空
 func clearSign() {
 pathArray.removeAll()
 self.setNeedsDisplay()
 }

 // 撤销
 func undoSign() {
 guard pathArray.count > 0 else {
 return
 }
 pathArray.removeLast()
 self.setNeedsDisplay()
 }

 /// 签名转化为图片
 func saveSignToImage() -> UIImage? {
 UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)
 guard let context = UIGraphicsGetCurrentContext() else {
 return nil
 }
 self.layer.render(in: context)
 let image = UIGraphicsGetImageFromCurrentImageContext()
 UIGraphicsEndImageContext()
 return image
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼。

您可能感兴趣的文章:

  • IOS开发之多线程NSThiread GCD NSOperation Runloop
  • iOS实现音乐播放器图片旋转
  • iOS WKWebview 白屏检测实现的示例
  • iOS实现折叠单元格
  • iOS蓝牙设备名称缓存问题的解决方法
  • iOS如何开发简单的手绘应用实例详解
  • iOS 如何高效的使用多线程
  • iOS程序性能优化的技巧
  • iOS中各种UI控件属性设置示例代码
  • 分析IOS RunLoop的事件循环机制

相关推荐:

Python定时任务教程_APScheduler使用详解

APScheduler是Python中功能强大且灵活的定时任务调度库,支持内存级或持久化级任务管理,提供BlockingScheduler、BackgroundScheduler和AsyncIOScheduler三种常用调度器,以及date、interval、cron四种触发器,并建议生产环境使用S...

iOS中Safari点击事件失效怎么办

小编给大家分享一下iOS中Safari点击事件失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题描述当使用委托给一个元素添加click事件时,如果事件是委托到document或body上,并且委托的元素是默认不可...

开发者必备实用工具

工欲善其事必先利其器,今天给大家推荐一些程序员(开发者)用得上的实用开发工具,部分下载地址已经在链接中,需要的话可以自取。 1、文本编辑器——Notepad++ 相信绝大部分程序员用上它都会爱得死去活来。Notepad++是一套非常有特色的自由软件的纯文字编辑器。支持27种编程语言,通吃C,C++,...

如何使用iOS开发实现翻转扑克牌动画

这篇文章主要介绍了如何使用iOS开发实现翻转扑克牌动画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。动画效果实现原理实现原理就是创建三个扑克牌pockerView,先在扑克牌上添加一个imageview,作为牌的背面。然后实现翻转动画...

iOS浮点类型精度问题的原因与解决办法是什么

这篇文章主要为大家分析了iOS浮点类型精度问题的原因与解决办法是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“iOS浮点类型精度问题的原因与解决办法是什么”的知识吧。前言相信不少人(其实我觉得应该是每个人)都遇到...

IOS如何实现三数之和

小编给大家分享一下IOS如何实现三数之和,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、三数求和简单介绍对于一个整数的数组,是否存在a,b,c使得a+b+c=0,返回abc数组,相同数组只返回一个,:例如:[-1,-2,...

利用python怎么在ios中模拟一个点击事件

利用python怎么在ios中模拟一个点击事件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码示例Python Version import socket import time # eve...

php如何判断是安卓还是ios开发

小编给大家分享一下php如何判断是安卓还是ios开发,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! php判断是安卓还是ios的方法:1、创建一个PHP示例文件;2、通过“functionget_device_type()...