iOS swift 最好用的 手勢密碼 九宮格

GPassword

GPassword 是一個簡單、高效、易用的手勢密碼庫,基於 CAShapeLayer 和 UIBezeierPath。git

重寫手勢密碼(九宮格)的原因

  • Swift 版如今 Github 上都比較難用,依據這些難用的改造的也不怎麼好用~
  • 功能不大,可是涉及的東西挺有意思,我重寫複習了下三角函數和反三角函數
  • 原有庫使用重寫 drawRect 在繪製時會形成內存暴漲
  • 原有庫視圖層級複雜形成額外沒必要要的代碼邏輯
  • 原有庫代碼耦合嚴重、難於擴展
  • 封裝手勢密碼私有庫時,最後暴露出來的不該該是一個控制器,而應該是視圖,要否則作界面定製將會很難作

特性

  • 使用代理將手勢密碼圖繪製完成的密碼傳出
  • 使用 CAShapeLayer 和 UIBezeierPath,擁有更好的性能
  • 支持定義 3*34*4...的矩陣
  • 支持多種正常和選中的樣式
  • 使用 KeyChain 和 UserDefaults 來存儲相關信息

部分截圖展現

要求

  • iOS 8.0+
  • Xcode 9.0+
  • Swift 4.0+

安裝

CocoaPodsgithub

pod "GPassword"
複製代碼

或者直接拖拽 Source 文件夾進入你的項目。swift

使用

定義統一的樣式,你能夠調用:函數

GPassword.config { (options) in
    options.connectLineStart = .border
    options.normalstyle = .innerFill
    options.isDrawTriangle = true
    options.matrixNum = 3
}
複製代碼

而後能夠直接用這個文件 Box.swift 直接做爲手勢密碼視圖或者將它添加到控制器上使用性能

fileprivate lazy var passwordBox: Box = {
    let box = Box(frame: CGRect(x: 50, y: 200, width: GWidth - 2 * 50, height: 400))
    box.delegate = self
    return box
}()
複製代碼

而後須要作的就是實現兩個代理方法,具體的業務邏輯也應該在裏面實現:ui

  1. sendTouchPoint 能夠從內部發出完整的手勢密碼
  2. touchesEnded 根據類型(設置/確認/修改)處理具體的業務邏輯
extension PasswordViewController: EventDelegate {
    func sendTouchPoint(with tag: String) {
        password += tag
        // get complete password
    }
    
    func touchesEnded() {
        // write business logics according to type
    }
}
複製代碼

開發人能夠根據本身的業務邏輯實現具體的細節,在 demo 裏我已經寫了一個簡單的例子能夠直接使用參考 PasswordViewController.swift,根據本身的狀況進行調整。spa

相關文章
相關標籤/搜索