91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS如何實現九宮格連線手勢解鎖

發布時間:2020-08-03 09:16:51 來源:億速云 閱讀:383 作者:小豬 欄目:移動開發

這篇文章主要講解了iOS如何實現九宮格連線手勢解鎖,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

效果圖:

iOS如何實現九宮格連線手勢解鎖

核心代碼:

//
// 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

看完上述內容,是不是對iOS如何實現九宮格連線手勢解鎖有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石首市| 栾城县| 清丰县| 上杭县| 宜宾市| 哈巴河县| 米泉市| 建昌县| 西城区| 邮箱| 凌云县| 台山市| 大名县| 波密县| 平武县| 友谊县| 罗江县| 白山市| 当涂县| 武山县| 新民市| 罗田县| 从化市| 碌曲县| 商南县| 元江| 灵寿县| 苏尼特左旗| 宁海县| 安福县| 景德镇市| 澄迈县| 桃源县| 周宁县| 石楼县| 吴忠市| 清远市| 汪清县| 弥渡县| 津市市| 称多县|