GPassword
GPassword 是一個簡單、高效、易用的手勢密碼庫
,基於 CAShapeLayer 和 UIBezeierPath。
重寫手勢密碼(九宮格)的緣由
- Swift 版現在 Github 上都比較難用,依據這些難用的改造的也不怎麼好用~
- 功能不大,但是涉及的東西挺有意思,我重寫複習了下
三角函式和反三角函式
- 原有庫使用重寫 drawRect 在繪製時會造成記憶體暴漲
- 原有庫檢視層級複雜造成額外不必要的程式碼邏輯
- 原有庫程式碼耦合嚴重、難於擴充套件
- 封裝手勢密碼
私有庫
時,最後暴露出來的不應該是一個控制器,而應該是檢視,要不然做介面定製將會很難做
特性
- 使用代理將手勢密碼圖繪製完成的密碼傳出
- 使用 CAShapeLayer 和 UIBezeierPath,擁有更好的效能
- 支援定義
3*3
、4*4
...的矩陣 - 支援多種正常和選中的樣式
- 使用 KeyChain 和 UserDefaults 來儲存相關資訊
部分截圖展示
要求
- 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
}()
複製程式碼
然後需要做的就是實現兩個代理方法,具體的業務邏輯也應該在裡面實現:
sendTouchPoint
可以從內部發出完整的手勢密碼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
,根據自己的情況進行調整。