iOS实现九宫格连线手势解锁
更新时间:2020年6月30日 23:42 点击:1708
本文实例为大家分享了iOS实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下
Demo下载地址:手势解锁
效果图:
核心代码:
// // ClockView.m // 手势解锁 // // Created by llkj on 2017/8/24. // Copyright © 2017年 LayneCheung. All rights reserved. // #import "ClockView.h" @interface ClockView () //存放当前选中的按钮 @property (nonatomic, strong) NSMutableArray *selectBtnArry; //当前手指所在点 @property (nonatomic, assign) CGPoint curP; @end @implementation ClockView - (void)awakeFromNib{ [super awakeFromNib]; //初始化 [self setUp]; } - (NSMutableArray *)selectBtnArry{ if (_selectBtnArry == nil) { _selectBtnArry = [NSMutableArray array]; } return _selectBtnArry; } - (void)setUp{ for (int i = 0; i < 9; i ++) { //创建按钮 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.tag = i; btn.userInteractionEnabled = NO; [btn setImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal]; [btn setImage:[UIImage imageNamed:@"gesture_node_selected"] forState:UIControlStateSelected]; [self addSubview:btn]; } } //获取当前点 - (CGPoint)getCurrentPoint:(NSSet *)point{ UITouch *touch = [point anyObject]; return [touch locationInView:self]; } //返回按钮 - (UIButton *)btnRectContainsPoint:(CGPoint)point{ //遍历brn判断当前点在不在btn上 for (UIButton *btn in self.subviews) { if (CGRectContainsPoint(btn.frame, point)) { return btn; } } return nil; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //1.获取当前点 CGPoint curP = [self getCurrentPoint:touches]; //2.判断当前点在不在btn上 UIButton *btn = [self btnRectContainsPoint:curP]; if (btn && btn.selected == NO) { btn.selected = YES; //保存选中的按钮 [self.selectBtnArry addObject:btn]; } } - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //1.获取当前点 CGPoint curP = [self getCurrentPoint:touches]; self.curP = curP; //2.判断当前点在不在btn上 UIButton *btn = [self btnRectContainsPoint:curP]; if (btn && btn.selected == NO) { btn.selected = YES; //保存选中的按钮 [self.selectBtnArry addObject:btn]; } //重绘 [self setNeedsDisplay]; } - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSMutableString *str = [NSMutableString string]; //1.取消所有选中的按钮 for (UIButton *btn in self.selectBtnArry) { btn.selected = NO; [str appendFormat:@"%ld", btn.tag]; } //2.清空路径 [self.selectBtnArry removeAllObjects]; [self setNeedsDisplay]; //查看是否是第一次设置密码 NSString *keyPwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"keyPwd"]; if (!keyPwd) { [[NSUserDefaults standardUserDefaults] setObject:str forKey:@"keyPwd"]; [[NSUserDefaults standardUserDefaults] synchronize]; UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"第一次设置密码成功" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertV show]; NSLog(@"第一次输入密码"); }else{ if ([keyPwd isEqualToString:str]) { NSLog(@"密码正确"); UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"手势输入正确" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertV show]; }else{ NSLog(@"密码错误"); UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"手势输入错误" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertV show]; } } //3.查看当前选中按钮的顺序 NSLog(@"选中按钮顺序为:%@",str); } - (void)drawRect:(CGRect)rect{ if (self.selectBtnArry.count) { //1.创建路径 UIBezierPath *path = [UIBezierPath bezierPath]; //2.取出所有保存的按钮 for (int i = 0; i < self.selectBtnArry.count; i ++) { UIButton *btn = self.selectBtnArry[i]; //当前按钮是不是第一个按钮 if (i == 0) { //设置成路径的起点 [path moveToPoint:btn.center]; } else { //添加一根线到按钮中心 [path addLineToPoint:btn.center]; } } //添加一根线到当前手指所在点 [path addLineToPoint:self.curP]; //设置线宽/颜色 [path setLineWidth:5]; [[UIColor whiteColor] set]; [path setLineJoinStyle:kCGLineJoinRound]; //3.绘制路径 [path stroke]; } } - (void)layoutSubviews{ [super layoutSubviews]; CGFloat x = 0; CGFloat y = 0; CGFloat btnWH = 75; int column = 3; int margin = (self.bounds.size.width - (column * btnWH)) / (column + 1); int currentColumn = 0; int currentRow = 0; for (int i = 0; i < self.subviews.count; i ++) { // 求当前所在的列 currentColumn = i % column; // 求当前所在的行 currentRow = i / column; x = margin + (btnWH + margin) * currentColumn; y = margin + (btnWH + margin) * currentRow; UIButton *btn = self.subviews[i]; btn.frame = CGRectMake(x, y, btnWH, btnWH); } } @end
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
相关文章
- 这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
iOS APP h5快捷程序 .mobileconfig的生成
1.从APP Store 下载Apple Configurator 2从一个管理点管理所有iOS设备应用程序,文档和配置文件。想要确保您的所有家庭成员在其每台iOS设备上都有类似的应用和文档,管理日益增...2021-12-23iOS设置UIButton文字显示位置和字体大小、颜色的方法
这篇文章给大家分享了iOS如何设置UIButton的文字显示位置和字体的大小、颜色,文中给出了示例代码,相信对大家的学习和理解很有帮助,有需要的朋友们下面来一起看看吧。...2020-06-30- 这篇文章主要为大家详细介绍了iOS如何将图片裁剪成圆形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-30
- 这篇文章主要给大家介绍了关于iOS给border设置渐变色的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-09
- 这篇文章主要介绍了iOS新版微信底部返回横条问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
- 这篇文章主要介绍了vue+axios全局添加请求头和参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-24
- 这篇文章主要给大家介绍了关于iOS蓝牙设备名称缓存问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
- 这篇文章主要介绍了iOS新版微信底部工具栏遮挡问题完美解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
- 这篇文章主要给大家介绍了关于iOS新增绘制圆的方法,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
- 这篇文章主要为大家详细介绍了iOS UIBezierPath实现饼状图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-20
- 这篇文章主要介绍了封装 axios+promise通用请求函数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
- ios获取文件路径的方法,iphone沙箱模型的四个文件夹,通过documents,tmp,app,Library得到模拟器路径的简单方式,下面小编整理相关资料,把IOS获取各种文件目录路径的方式总结如下,需要的朋友可以参考下...2020-06-30
- 这篇文章主要为大家详细介绍了iOS UICollectionView实现卡片效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-30
- 这篇文章主要介绍了Vue中 axios delete请求参数操作,具有很好的参考价值,希望对大家有所 帮助。一起跟随小编过来看看吧...2020-08-26
- 这篇文章主要为大家详细介绍了iOS实现电子签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-12-08
- 这篇文章主要介绍了Vue使用axios引起的后台session不同操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
- 这篇文章主要为大家详细介绍了iOS实现循环滚动公告栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-20
- 这篇文章主要介绍了iOS APP实现微信H5支付示例总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
- 这篇文章主要介绍了iOS WKWebview 白屏检测实现的示例,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下...2020-10-20