在 Swift 中使用简单、强大、可定制的图案锁视图。图形解锁/手势解锁 / 手势密码 / 图案密码 / 九宫格密码
与其他同类三方库相比有哪些优势:
- 完全基于协议编程,支持高度自定义 网格视图 和 连接线视图,轻松实现各类不同需求;
- 默认支持多种配置效果,支持大部分主流效果,引入即可满足需求;
- 源码使用 Swift5 编写,通过泛型、枚举、函数式编程优化代码,具有更高的学习价值;
- 后期会持续迭代,不断添加主流效果;
效果预览
说明 | Gif |
---|---|
箭头 | ![]() |
中间点自动连接 | ![]() |
小灰点 | ![]() |
小白点 | ![]() |
荧光蓝 | ![]() |
填充白色 | ![]() |
阴影 | ![]() |
图片 | ![]() |
旋转(鸡你太美) | ![]() |
破折线 | ![]() |
图片连接线(箭头) | ![]() |
图片连接线(小鱼儿) | ![]() |
设置密码 | ![]() |
修改密码 | ![]() |
验证密码 | ![]() |
要求
- iOS 9.0+
- Xcode 10.2.1+
- Swift 5.0
安装
手动
克隆代码,将 Sources 文件夹拖入项目,即可使用;
CocoaPods
target '<Your Target Name>' do
pod 'JXPatternLock'
end
先执行 pod repo update
,然后执行 pod install
Carthage
在cartfile文件中添加:
github "pujiaxin33/JXPatternLock"
然后执行carthage update --platform iOS
即完成。
使用
PatternLockViewConfig
初始化LockConfig
方式一:使用LockConfig
是默认提供的类,实现了PatternLockViewConfig
协议。可以直接通过LockConfig
的属性进行自定义。
let config = LockConfig()
config.gridSize = CGSize(width: 70, height: 70)
config.matrix = Matrix(row: 3, column: 3)
config.errorDisplayDuration = 1
PatternLockViewConfig
协议的类
方式二:创建一个实现这种方式可以将所有的配置细节集中到自定义类内部,外部只需要初始化这个自定义类即可。详细信息请参考demo中的ArrowConfig
类。这样做的好处是,当多个地方需要使用相同的配置时,只需要初始化相同的类,而无需像使用LockConfig
那样复制属性配置代码。
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)
结构
完全遵循协议开发。 PatternLockView
依赖于配置协议PatternLockViewConfig
。 PatternLockViewConfig
依赖于配置网格协议PatternLockGrid
和连线协议ConnectLine
。
补充
如果刚开始使用JXPatternLock
,当开发过程中需要支持某种特性时,请务必先搜索使用文档或者源代码。确认是否已经实现了支持想要的特性。请勿在没有查阅文档和源代码的情况下直接提问,这将对大家的时间造成浪费。如果没有支持想要的特性,欢迎提出Issue进行讨论,或者自己实现并提交一个PullRequest。
在使用过程中,如有任何建议或问题,可以通过以下方式联系我:
邮箱:[email protected]
喜欢就star
许可
JXPatternLock 根据 MIT 许可协议发布。