1. 程式人生 > 程式設計 >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
 }
}

原始碼

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。