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

李傑愛學習發表於2018-07-16

GPassword

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

重寫手勢密碼(九宮格)的緣由

  • Swift 版現在 Github 上都比較難用,依據這些難用的改造的也不怎麼好用~
  • 功能不大,但是涉及的東西挺有意思,我重寫複習了下三角函式和反三角函式
  • 原有庫使用重寫 drawRect 在繪製時會造成記憶體暴漲
  • 原有庫檢視層級複雜造成額外不必要的程式碼邏輯
  • 原有庫程式碼耦合嚴重、難於擴充套件
  • 封裝手勢密碼私有庫時,最後暴露出來的不應該是一個控制器,而應該是檢視,要不然做介面定製將會很難做

特性

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

部分截圖展示

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

要求

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

安裝

CocoaPods

pod "GPassword"
複製程式碼

或者直接拖拽 Source 資料夾進入你的專案。

使用

定義統一的樣式,你可以呼叫:

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
}()
複製程式碼

然後需要做的就是實現兩個代理方法,具體的業務邏輯也應該在裡面實現:

  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,根據自己的情況進行調整。

相關文章