首页 > 学院 > 开发设计 > 正文

IOS学习笔记2015-04-15手势密码(原)

2019-11-14 19:15:51
字体:
来源:转载
供稿:网友
////  wpsignPassWordView.h//  网投网////  Created by wangtouwang on 15/4/9.//  Copyright (c) 2015年 wangtouwang. All rights reserved.//#import <UIKit/UIKit.h>@class  WPSignPasswordView;@PRotocol WPSignPasswordDelegate <NSObject>//设置密码 确认成功@required-(void)setPawSuccess:(NSString *)password;//设置第一次临时密码成功@required-(void)setFirstPasswordSuccess:(NSString *)password;//第二次输入确认密码错误-(void)setTwoPasswordError;//修改手势密码 请输入之前的密码-(void)setSuccessAfterFirstPS:(NSString *)password;//进入程序后输入手势密码判断是否正确-(void)confirmPassword:(NSString *)password;//手势密码进入修改状态(即原密码输入成功) 首次输入-(void)updateSPFirst:(NSString *)password;//手势密码进入修改状态(即原密码输入成功) 二次输入,相当于输入密码确认-(void)updateSPConfirm:(NSString *)password;@end#pragma mark 手势密码View@interface WPSignPasswordView : UIView//设置代理@property(nonatomic,strong) id<WPSignPasswordDelegate> spDelegate;@end
////  WPSignPasswordView.m//  网投网////  Created by wangtouwang on 15/4/9.//  Copyright (c) 2015年 wangtouwang. All rights reserved.//#import "WPSignPasswordView.h"//屏幕的长宽#define KSCREEN_WIDTH [UIScreen mainScreen].bounds.size.width#define KSCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height@interface WPSignPasswordView(){    }@property(nonatomic,strong) NSMutableArray *stringArrays;@property(nonatomic,strong) NSMutableArray *allButtonsArray;//定义一个属性,记录当前点@property(nonatomic,assign)CGPoint currentPoint;@end@implementation WPSignPasswordView#pragma mark 实例化收集字符串的数组 并且用懒加载-(NSMutableArray *)getStringArrays{    if (self.stringArrays==nil) {        self.stringArrays = [NSMutableArray array];    }    return  self.stringArrays;}#pragma mark 实例化包含所有密码按钮的数组 并且用懒加载-(NSMutableArray *)getAllButtonsArray{    if (self.allButtonsArray==nil) {        self.allButtonsArray = [NSMutableArray array];    }    return self.allButtonsArray;}#pragma mark 复写初始化界面函数 initFrame-(instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        [self setup];    }    return self;}#pragma mark 界面布局-(void)setup{    //NSLog(@"初始化界面布局执行的");    for (int index=1; index<=9; index++) {        //创建按钮        UIButton *numberButton = [[UIButton alloc] init];        //设置按钮的背景图片,并且设置是在何种状态下        [numberButton setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];        [numberButton setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];        //将按钮添加到视图中        [self addSubview:numberButton];        //将按钮存储到按钮数组中        [[self getAllButtonsArray] addObject:numberButton];        //禁止按钮点击事件        numberButton.userInteractionEnabled=NO;        //设置按钮标志值        numberButton.tag=index;            }}#pragma mark 看看何时触发-(void)layoutSubviews{    //需要先调用父类的方法    [super layoutSubviews];    //设置按钮位置    for (int index=0; index<self.allButtonsArray.count; index++) {        CGFloat inverst_top = KSCREEN_HEIGHT/4;        inverst_top=0;        UIButton *btn =(UIButton *) self.allButtonsArray[index];        //NSLog(@"%i",btn.tag);        //获取行号        CGFloat row = index/3;        //获取坐标号        CGFloat loc = index%3;        // 按钮长跟宽        CGFloat  btnHeight = 75;        CGFloat  btnWith=btnHeight;        //获取按钮间隔距离        CGFloat inverst = (KSCREEN_WIDTH-btnHeight*3)/4;        //X Y 坐标        CGFloat btnX = inverst +loc*(btnWith+inverst);        CGFloat btnY = inverst + row*(btnHeight+inverst);        btn.frame=CGRectMake(btnX, btnY+inverst_top-15, btnHeight, btnHeight);    }}#pragma mark 复写画布布局- (void)drawRect:(CGRect)rect {    //NSLog(@"再次触发吗");    //获取上下文    CGContextRef context = UIGraphicsGetCurrentContext();#pragma mark 填充画布颜色    //填充上下文颜色    CGContextSetFillColorWithColor(context, [[UIColor grayColor] CGColor]);    //补充当前填充颜色的rect    CGContextFillRect(context, rect);#pragma mark -实现画线功能    int i =0;    //绘图(线段)    for (UIButton *btn in self.stringArrays) {        if (0==i) {            //设置起点(注意连接的是中点)            CGContextMoveToPoint(context, btn.center.x, btn.center.y);        }else{            CGContextAddLineToPoint(context, btn.center.x, btn.center.y);        }        i++;    }    //当所有按钮的中点都连接好之后,再连接手指当前的位置    //判断数组中是否有按钮,只有有按钮的时候才绘制    if (self.stringArrays.count !=0) {        //画直线        CGContextAddLineToPoint(context, self.currentPoint.x, self.currentPoint.y);    }    //渲染    //设置线条的宽度    CGContextSetLineWidth(context, 10);    //设置图像上下文中的接接线的样式。    CGContextSetLineJoin(context, kCGLineJoinRound);    //设置线条终点形状    CGContextSetLineCap(context, kCGLineCapRound);    //画笔颜色设置    CGContextSetRGBStrokeColor(context, 255/255.0, 100/255.0, 0/255.0, 1);    //开始绘制图片    CGContextStrokePath(context);}#pragma mark 复写 UIResponder--API 监听手指移动开始-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    UITouch *uitouch = [touches anyObject];    CGPoint point =  [uitouch locationInView:uitouch.view];    UIButton *targetBtn = nil;    for (UIButton *btn in self.allButtonsArray ) {        if (CGRectContainsPoint(btn.frame, point)) {            targetBtn = btn;            break;        }    }    if (targetBtn&&targetBtn.selected!=YES) {        targetBtn.selected=YES;        [[self getStringArrays] addObject:targetBtn];    }}#pragma mark 复写 UIResponder--API 监听手指移动-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{    UITouch *uitouch = [touches anyObject];    CGPoint movepoint =  [uitouch locationInView:uitouch.view];    UIButton *targetBtn = nil;    for (UIButton *btn in self.allButtonsArray ) {        if (CGRectContainsPoint(btn.frame, movepoint)) {            targetBtn = btn;            break;        }    }    if (targetBtn && targetBtn.selected != YES) {        //设置按钮的选中状态        targetBtn.selected=YES;        //把按钮添加到数组中        [[self getStringArrays] addObject:targetBtn];    }    //记录当前点(不在按钮的范围内)    self.currentPoint=movepoint;    //通知view重新绘制    [self setNeedsDisplay];}#pragma mark 复写 UIResponder--API 监听手指离开屏幕-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{    //取出用户输入的密码 创建一个可变的字符串,用来保存用户密码 取出用户输入的密码    NSMutableString *result=[NSMutableString string];    for (UIButton *btn in self.stringArrays) {        [result appendFormat:@"%lu",btn.tag];    }    //NSLog(@"用户输入的密码为:%@",result);`    //清空连线记录    [self.stringArrays makeObjectsPerformSelector:@selector(setSelected:) withObject:@(NO)];    //清空数组    [self.stringArrays removeAllObjects];    [self setNeedsDisplay];    //清空当前点    self.currentPoint=CGPointZero;        //获取NSUserDefaults对象,判断该对象中是否已存在手势密码    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];    BOOL flag = [userDefaults boolForKey:@"flag"];    NSInteger temp_signpaw = [userDefaults integerForKey:@"temp_signpaw"];    if (!flag) {#pragma mark -还未设置密码        //记录临时密码        if (temp_signpaw==0) {            if ([self.spDelegate respondsToSelector:@selector(setFirstPasswordSuccess:)]) {                [self.spDelegate setFirstPasswordSuccess:result];            }        }        //NSLog(@"%i",temp_signpaw);                if (temp_signpaw!=0&&temp_signpaw==[result integerValue]) {            //正确跳转            if ([self.spDelegate respondsToSelector:@selector(setPawSuccess:)]) {                [self.spDelegate setPawSuccess:result];            }        }else if(temp_signpaw!=0&&temp_signpaw!=[result integerValue]){            //错误处理            if([self.spDelegate respondsToSelector:@selector(setTwoPasswordError)]){                [self.spDelegate setTwoPasswordError];            }        }    }else{#pragma mark -已设置密码了        NSInteger status = [userDefaults integerForKey:@"status"];        if (status==-1) {            //调试状态            NSLog(@"调试状态");        }else{            //正常状态            //判断是从那个窗口跳转过来的            NSString *page = [userDefaults objectForKey:@"turnPage"];            if ([page isEqualToString:@"mainPage"]) {                if ([self.spDelegate respondsToSelector:@selector(confirmPassword:)]) {                    [self.spDelegate confirmPassword:result];                }            }else{                NSInteger updateStatus = [userDefaults integerForKey:@"updateStatus"];                if (updateStatus==1) {                   NSInteger tempUpdate_signpaw = [userDefaults integerForKey:@"tempUpdate_signpaw"];                    if (tempUpdate_signpaw==0) {                        if ([self.spDelegate respondsToSelector:@selector(updateSPFirst:)]) {                            [self.spDelegate updateSPFirst:result];                        }                    }                    if(tempUpdate_signpaw!=0){                        if ([self.spDelegate respondsToSelector:@selector(updateSPConfirm:)]) {                            [self.spDelegate updateSPConfirm:result];                        }                    }                }                if(updateStatus!=1){                    //判断是否为已成功输入手势密码                    if ([self.spDelegate respondsToSelector:@selector(setSuccessAfterFirstPS:)]) {                        [self.spDelegate setSuccessAfterFirstPS:result];                    }                }            }        }    }}@end

 

 

 

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表