Swift手势密码库,用这一个就够了!

一个轻量级、面对协议编程、高度自定义的 图形解锁/手势解锁 / 手势密码 / 图案密码 / 九宫格密码

相比于其他同类三方库有哪些优势:

  • 完全面对协议编程,支持高度自定义网格视图连接线视图,轻松实现各类不同需求;
  • 默认支持多种配置效果,支持大部分主流效果,引入就可以搞定需求;
  • 源码采用Swift5编写,通过泛型、枚举、函数式编程优化代码,具有更高的学习价值;
  • 后期会持续迭代,不断添加主流效果;

Github地址

JXPatternLock

效果预览

说明 Gif
箭头
image
中间点自动连接
image
小灰点
image
小白点
image
荧光蓝
image
fill白色
image
阴影
image
图片
image
旋转(鸡你太美)
image
破折线
image
图片连接线(箭头)
image
图片连接线(小鱼儿)
image
设置密码
image
修改密码
image
验证密码
image

使用

初始化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)

结构

image

完全遵从面对协议开发。
PatternLockView依赖于配置协议PatternLockViewConfig
配置协议配置网格协议PatternLockGrid和连接线协议ConnectLine

Github地址

JXPatternLock

推荐阅读更多精彩内容

  • 站在熙熙攘攘的人群中,你也许不是那么起眼,拥有的不是那么多,但这不要紧。要紧的是:你始终循着自己的脚步,在不慌不忙...
    范zx阅读 51评论 0 0
  • 此文假设所有人都会java的语法. 手把手创建项目 打开Android studio后, 选择file-new p...
    _道友请留步_阅读 238评论 0 1
  • 作者『麻婆碎豆腐』 主题『27天日常生活记录』 最近网上发生了很多事情。 有留学女学者被残忍杀害,女子深夜被施暴拖...
    我想学习啦阅读 19评论 0 1
  • 20190409 周二 小雨 今天下午在外听了李杲老师的课程,明白了关于脑场,关于了凡四训,关于日行一...
    云时光成长星球阅读 1,911评论 0 1
  • 小时候,学校离家远,但是离父母单位比较近。父母是双职工,在镇上的纺织厂上班。每天,父母都骑着自行车载着我去学校。路...
    父母的依靠阅读 33评论 1 1