一個輕量級、面對協(xié)議編程、高度自定義的 圖形解鎖/手勢解鎖 / 手勢密碼 / 圖案密碼 / 九宮格密碼
相比于其他同類三方庫有哪些優(yōu)勢:
- 完全面對協(xié)議編程,支持高度自定義網(wǎng)格視圖和連接線視圖,輕松實現(xiàn)各類不同需求;
- 默認(rèn)支持多種配置效果,支持大部分主流效果,引入就可以搞定需求;
- 源碼采用Swift5編寫,通過泛型、枚舉、函數(shù)式編程優(yōu)化代碼,具有更高的學(xué)習(xí)價值;
- 后期會持續(xù)迭代,不斷添加主流效果;
Github地址
效果預(yù)覽
| 說明 | Gif |
|---|---|
| 箭頭 | image
|
| 中間點自動連接 | image
|
| 小灰點 | image
|
| 小白點 | image
|
| 熒光藍 | image
|
| fill白色 | image
|
| 陰影 | image
|
| 圖片 | image
|
| 旋轉(zhuǎn)(雞你太美) | image
|
| 破折線 | image
|
| 圖片連接線(箭頭) | image
|
| 圖片連接線(小魚兒) | image
|
| 設(shè)置密碼 | image
|
| 修改密碼 | image
|
| 驗證密碼 | image
|
使用
初始化PatternLockViewConfig
方式一:使用LockConfig
LockConfig是默認(rèn)提供的類,實現(xiàn)了PatternLockViewConfig協(xié)議??梢灾苯油ㄟ^LockConfig的屬性進行自定義。
let config = LockConfig()
config.gridSize = CGSize(width: 70, height: 70)
config.matrix = Matrix(row: 3, column: 3)
config.errorDisplayDuration = 1
方式二:新建實現(xiàn)PatternLockViewConfig協(xié)議的類
該方式可以將所有配置細(xì)節(jié)聚集到自定義類的內(nèi)部,外部只需要初始化自定義類即可。詳情請參考demo里面的ArrowConfig類。這樣有個好處就是,多個地方都需要用到同樣配置的時候,只需要初始化相同的類,而不用像使用LockConfig那樣,復(fù)制屬性配置代碼。
struct ArrowConfig: PatternLockViewConfig {
var matrix: Matrix = Matrix(row: 3, column: 3)
var gridSize: CGSize = CGSize(width: 70, height: 70)
var connectLine: ConnectLine?
var autoMediumGridsConnect: Bool = false
//其他屬性配置!只是示例,就不顯示所有配置項,影響文檔長度
}
配置GridView
config.initGridClosure = {(matrix) -> PatternLockGrid in
let gridView = GridView()
let outerStrokeLineWidthStatus = GridPropertyStatus<CGFloat>.init(normal: 1, connect: 2, error: 2)
let outerStrokeColorStatus = GridPropertyStatus<UIColor>(normal: tintColor, connect: tintColor, error: .red)
gridView.outerRoundConfig = RoundConfig(radius: 33, lineWidthStatus: outerStrokeLineWidthStatus, lineColorStatus: outerStrokeColorStatus, fillColorStatus: nil)
let innerFillColorStatus = GridPropertyStatus<UIColor>(normal: nil, connect: tintColor, error: .red)
gridView.innerRoundConfig = RoundConfig(radius: 10, lineWidthStatus: nil, lineColorStatus: nil, fillColorStatus: innerFillColorStatus)
return gridView
}
配置ConnectLine
let lineView = ConnectLineView()
lineView.lineColorStatus = .init(normal: tintColor, error: .red)
lineView.triangleColorStatus = .init(normal: tintColor, error: .red)
lineView.isTriangleHidden = false
lineView.lineWidth = 3
config.connectLine = lineView
初始化PatternLockView
lockView = PatternLockView(config: config)
lockView.delegate = self
view.addSubview(lockView)
結(jié)構(gòu)
image
完全遵從面對協(xié)議開發(fā)。
PatternLockView依賴于配置協(xié)議PatternLockViewConfig。
配置協(xié)議配置網(wǎng)格協(xié)議PatternLockGrid和連接線協(xié)議ConnectLine。