
logo
前言
目前國(guó)內(nèi)的應(yīng)用,只要涉及到支付的基本都會(huì)加上手勢(shì)密碼進(jìn)行安全驗(yàn)證,本來(lái)想找開(kāi)源實(shí)現(xiàn),發(fā)現(xiàn)已有的在實(shí)現(xiàn)、效率、擴(kuò)展都不如人意,所以結(jié)合現(xiàn)有的一些應(yīng)用的表現(xiàn)效果自己實(shí)現(xiàn)了 [GPassword] (https://github.com/hackjie/GPassword) 并且開(kāi)源。
特性
- 使用代理將手勢(shì)密碼圖繪制完成的密碼傳出
- 使用 CAShapeLayer 和 UIBezeierPath,擁有更好的性能
- 支持定義 33、44...的矩陣
- 支持多種正常和選中的樣式
- 使用 KeyChain 和 UserDefaults 來(lái)存儲(chǔ)相關(guān)信息
部分截圖展示

first.gif

second.gif

third.gif
要求
- iOS 8.0+
- Xcode 9.0+
- Swift 4.0+
安裝
CocoaPods
pod "GPassword"
或者直接拖拽 Source 文件夾進(jìn)入你的項(xiàng)目。
使用
定義統(tǒng)一的樣式,你可以調(diào)用:
GPassword.config { (options) in
options.connectLineStart = .border
options.normalstyle = .innerFill
options.isDrawTriangle = true
options.matrixNum = 3
}
然后可以直接用這個(gè)文件 Box.swift 直接作為手勢(shì)密碼視圖或者將它添加到控制器上使用
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
}()
然后需要做的就是實(shí)現(xiàn)兩個(gè)代理方法,具體的業(yè)務(wù)邏輯也應(yīng)該在里面實(shí)現(xiàn):
-
sendTouchPoint可以從內(nèi)部發(fā)出完整的手勢(shì)密碼 -
touchesEnded根據(jù)類(lèi)型(設(shè)置/確認(rèn)/修改)處理具體的業(yè)務(wù)邏輯
extension PasswordViewController: EventDelegate {
func sendTouchPoint(with tag: String) {
password += tag
// get complete password
}
func touchesEnded() {
// write business logics according to type
}
}
開(kāi)發(fā)人可以根據(jù)自己的業(yè)務(wù)邏輯實(shí)現(xiàn)具體的細(xì)節(jié),在 demo 里我已經(jīng)寫(xiě)了一個(gè)簡(jiǎn)單的例子可以直接使用參考 PasswordViewController.swift,根據(jù)自己的情況進(jìn)行調(diào)整。
最后歡迎大家使用,如果有什么問(wèn)題可以及時(shí)反饋給我,謝謝!