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

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

iOS仿郵箱大師的九宮格手勢密碼解鎖

2020-07-26 03:23:09
字體:
供稿:網(wǎng)友

本文實(shí)例為大家分享了iOS手勢密碼解鎖的相關(guān)代碼,供大家參考,具體內(nèi)容如下

//// LockView.m// 手勢解鎖//// Created by Daniel on 16/4/4.// Copyright © 2016年 Daniel. All rights reserved.//  #import "LockView.h" @interface LockView () /** 保存已選中的按鈕 */@property(nonatomic, strong) NSMutableArray *selectedBtn;/** 當(dāng)前觸摸點(diǎn) */@property(nonatomic, assign) CGPoint curp;@end @implementation LockView - (NSMutableArray *)selectedBtn { if (_selectedBtn == nil) {  _selectedBtn = [NSMutableArray array]; } return _selectedBtn;} - (IBAction)pan:(UIPanGestureRecognizer *)pan {   //獲取當(dāng)前觸摸點(diǎn) _curp = [pan locationInView:self];   //判斷觸摸點(diǎn)在不在按鈕上 for (UIButton *btn in self.subviews) {  //如果在按鈕上就設(shè)置選中狀態(tài)     //觸摸點(diǎn)必須在button中心點(diǎn)30范圍內(nèi)才選中,更精確,體驗(yàn)更好  CGRect rect = CGRectMake(btn.center.x, btn.center.y, 30, 30);     if (CGRectContainsPoint(rect, _curp) && btn.selected == NO) {   btn.selected = YES;       //將這個選中的按鈕保存起來   [self.selectedBtn addObject:btn];          } }   //重繪,調(diào)用drawRect方法 [self setNeedsDisplay];   //手指抬起時 if(pan.state == UIGestureRecognizerStateEnded) {     NSMutableString *strM = [NSMutableString string];     //如果當(dāng)前觸摸點(diǎn)不在Button上,則手指抬起時,就顯示選中的Button以及連線  UIButton *lastBtn = [self.selectedBtn lastObject];     //把最后一個選中按鈕的中心點(diǎn)設(shè)置為當(dāng)前觸摸點(diǎn),清除最后多出來的一截連線  _curp = lastBtn.center;   for (UIButton *btn in self.selectedBtn) {   //保存手勢密碼   [strM appendFormat:@"%ld", btn.tag];  }     //strM就是密碼了  NSLog(@"%@",strM);     //TODO:對比之前保存的密碼,如果對了就直接跳轉(zhuǎn)界面了     //NSLog(@"手指抬起");  //這里了執(zhí)行完之后系統(tǒng)自動調(diào)用了重繪方法     //等待2s后清除所有連線,清除Button的選中狀態(tài)  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{   //取消按鈕選中   //[self.selectedBtn makeObjectsPerformSelector:@selector(setSelected:) withObject:NO];這句不知道為啥沒有效果,只好用循環(huán)了   for (UIButton *btn in self.selectedBtn) {    [btn setSelected:NO];   }   //清除連線,清空選中按鈕   [self.selectedBtn removeAllObjects];   [self setNeedsDisplay];  });    }    } - (void)drawRect:(CGRect)rect {  NSInteger count = self.selectedBtn.count;   //如果沒有按鈕被選中,就不畫線 if (count == 0) {  return; }   UIBezierPath *path = [UIBezierPath bezierPath];   //把所有點(diǎn)都連完線 for (int i = 0; i < count; i++) {  UIButton * btn = self.selectedBtn[i];  if (i == 0) {   //如果是第一個點(diǎn),就設(shè)置為起點(diǎn)   [path moveToPoint:btn.center];  }else {   //添加連線   [path addLineToPoint: btn.center];  } }   //畫最后一個點(diǎn)到手指觸摸點(diǎn)之間的線 [path addLineToPoint:_curp];   [[UIColor greenColor]set]; path.lineJoinStyle = kCGLineJoinRound; path.lineWidth = 8; [path stroke];  } - (void)awakeFromNib {   //創(chuàng)建9個按鈕 for (int i = 0; i < 9; i++) {  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];     //不允許與用戶交互,也就是點(diǎn)擊事件不作處理  btn.userInteractionEnabled = NO;     btn.tag = i;     [btn setImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];     [btn setImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];     [self addSubview:btn]; }  } - (void)layoutSubviews {   [super layoutSubviews];   //布局子控件 NSInteger count = self.subviews.count; //列數(shù) int cols = 3;   CGFloat x = 0; CGFloat y = 0; CGFloat w = 74; CGFloat h = 74; //間距 CGFloat margin = (self.bounds.size.width - w * cols) / (cols + 1);   CGFloat col = 0; CGFloat row = 0;   for (NSInteger i = 0; i < count; i++) {     UIButton *btn = self.subviews[i];     //計算當(dāng)前button的列行以及xy值  col = i % cols;  row = i / cols;  x = margin + col * (margin + w);  y = row * (margin + w);  btn.frame = CGRectMake(x, y, w, h); }    } @end

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 旬邑县| 蓬安县| 江口县| 绥宁县| 屏东县| 潞西市| 瑞金市| 杭锦旗| 三明市| 达孜县| 阿图什市| 建德市| 陕西省| 循化| 禄劝| 双桥区| 临夏市| 岱山县| 临海市| 靖边县| 蓝田县| 阿荣旗| 来安县| 通江县| 溧水县| 南华县| 集贤县| 阿巴嘎旗| 梁平县| 札达县| 于田县| 廊坊市| 宣化县| 松滋市| 汪清县| 会东县| 洪洞县| 卓尼县| 曲麻莱县| 锡林浩特市| 崇礼县|