国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS實現(xiàn)九宮格連線手勢解鎖

2020-07-26 01:28:53
字體:
供稿:網(wǎng)友

本文實例為大家分享了iOS實現(xiàn)九宮格連線手勢解鎖的具體代碼,供大家參考,具體內(nèi)容如下

Demo下載地址:手勢解鎖

效果圖:

核心代碼:

//// ClockView.m// 手勢解鎖//// Created by llkj on 2017/8/24.// Copyright © 2017年 LayneCheung. All rights reserved.//#import "ClockView.h"@interface ClockView ()//存放當(dāng)前選中的按鈕@property (nonatomic, strong) NSMutableArray *selectBtnArry;//當(dāng)前手指所在點@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 ++) { //創(chuàng)建按鈕 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]; }}//獲取當(dāng)前點- (CGPoint)getCurrentPoint:(NSSet *)point{ UITouch *touch = [point anyObject]; return [touch locationInView:self];}//返回按鈕- (UIButton *)btnRectContainsPoint:(CGPoint)point{ //遍歷brn判斷當(dāng)前點在不在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.獲取當(dāng)前點 CGPoint curP = [self getCurrentPoint:touches]; //2.判斷當(dāng)前點在不在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.獲取當(dāng)前點 CGPoint curP = [self getCurrentPoint:touches]; self.curP = curP; //2.判斷當(dāng)前點在不在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]; //查看是否是第一次設(shè)置密碼 NSString *keyPwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"keyPwd"]; if (!keyPwd) { [[NSUserDefaults standardUserDefaults] setObject:str forKey:@"keyPwd"]; [[NSUserDefaults standardUserDefaults] synchronize]; UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"第一次設(shè)置密碼成功" 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.查看當(dāng)前選中按鈕的順序 NSLog(@"選中按鈕順序為:%@",str);}- (void)drawRect:(CGRect)rect{ if (self.selectBtnArry.count) { //1.創(chuàng)建路徑 UIBezierPath *path = [UIBezierPath bezierPath]; //2.取出所有保存的按鈕 for (int i = 0; i < self.selectBtnArry.count; i ++) {  UIButton *btn = self.selectBtnArry[i];  //當(dāng)前按鈕是不是第一個按鈕  if (i == 0) {  //設(shè)置成路徑的起點  [path moveToPoint:btn.center];  } else {  //添加一根線到按鈕中心  [path addLineToPoint:btn.center];  } } //添加一根線到當(dāng)前手指所在點 [path addLineToPoint:self.curP]; //設(shè)置線寬/顏色 [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 ++) { // 求當(dāng)前所在的列 currentColumn = i % column; // 求當(dāng)前所在的行 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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 缙云县| 大港区| 汝阳县| 百色市| 辽中县| 喀什市| 沂南县| 平陆县| 恩平市| 富裕县| 庆云县| 成武县| 兰溪市| 郯城县| 宁晋县| 广宗县| 兴业县| 多伦县| 伊宁县| 宝山区| 庄浪县| 霍山县| 沐川县| 阳高县| 塔河县| 惠州市| 陆丰市| 泸州市| 周至县| 砀山县| 于都县| 开平市| 界首市| 柞水县| 昆明市| 莆田市| 增城市| 南汇区| 社旗县| 阿勒泰市| 东海县|