IOS 学习笔记 2015

//
// WPSignPasswordView.m
// 网投网
//
// Created by wangtouwang on 15/4/9.
// Copyright © 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) {<br/>
    self.stringArrays = [NSMutableArray array];<br/>
}<br/>
return  self.stringArrays;<br/>

} #pragma mark 实例化包含所有密码按钮的数组 并且用懒加载
-(NSMutableArray *)getAllButtonsArray{

if (self.allButtonsArray==nil) {<br/>
    self.allButtonsArray = [NSMutableArray array];<br/>
}<br/>
return self.allButtonsArray;<br/>

} #pragma mark 复写初始化界面函数 initFrame
-(instancetype)initWithFrame:(CGRect)frame{

self = [super initWithFrame:frame];<br/>
if (self) {<br/>
    [self setup];<br/>
}<br/>
return self;<br/>

} #pragma mark 界面布局
-(void)setup{

//NSLog(@&#34;初始化界面布局执行的&#34;);<br/>
for (int index=; index&lt;=; index++) {<br/>
    //创建按钮<br/>
    UIButton *numberButton = [[UIButton alloc] init];<br/>
    //设置按钮的背景图片,并且设置是在何种状态下<br/>
    [numberButton setBackgroundImage:[UIImage imageNamed:@&#34;gesture_node_normal&#34;] forState:UIControlStateNormal];<br/>
    [numberButton setBackgroundImage:[UIImage imageNamed:@&#34;gesture_node_highlighted&#34;] forState:UIControlStateSelected];<br/>
    //将按钮添加到视图中<br/>
    [self addSubview:numberButton];<br/>
    //将按钮存储到按钮数组中<br/>
    [[self getAllButtonsArray] addObject:numberButton];<br/>
    //禁止按钮点击事件<br/>
    numberButton.userInteractionEnabled=NO;<br/>
    //设置按钮标志值<br/>
    numberButton.tag=index;

}
} #pragma mark 看看何时触发
-(void)layoutSubviews{

//需要先调用父类的方法<br/>
[super layoutSubviews];<br/>
//设置按钮位置<br/>
for (int index=; index&lt;self.allButtonsArray.count; index++) {<br/>
    CGFloat inverst_top = KSCREEN_HEIGHT/;<br/>
    inverst_top=;<br/>
    UIButton *btn =(UIButton *) self.allButtonsArray[index];<br/>
    //NSLog(@&#34;%i&#34;,btn.tag);<br/>
    //获取行号<br/>
    CGFloat row = index/;<br/>
    //获取坐标号<br/>
    CGFloat loc = index%;<br/>
    // 按钮长跟宽<br/>
    CGFloat  btnHeight = ;<br/>
    CGFloat  btnWith=btnHeight;<br/>
    //获取按钮间隔距离<br/>
    CGFloat inverst = (KSCREEN_WIDTH-btnHeight*)/;<br/>
    //X Y 坐标<br/>
    CGFloat btnX = inverst +loc*(btnWith+inverst);<br/>
    CGFloat btnY = inverst + row*(btnHeight+inverst);<br/>
    btn.frame=CGRectMake(btnX, btnY+inverst_top-, btnHeight, btnHeight);<br/>
}<br/>

} #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 =;
    //绘图(线段)
    for (UIButton *btn in self.stringArrays) {
    if (==i) {
    //设置起点(注意连接的是中点)
    CGContextMoveToPoint(context, btn.center.x, btn.center.y);
    }else{
    CGContextAddLineToPoint(context, btn.center.x, btn.center.y);
    }
    i++;
    }
    //当所有按钮的中点都连接好之后,再连接手指当前的位置
    //判断数组中是否有按钮,只有有按钮的时候才绘制
    if (self.stringArrays.count !=) {
    //画直线
    CGContextAddLineToPoint(context, self.currentPoint.x, self.currentPoint.y);
    }
    //渲染
    //设置线条的宽度
    CGContextSetLineWidth(context, );
    //设置图像上下文中的接接线的样式。
    CGContextSetLineJoin(context, kCGLineJoinRound);
    //设置线条终点形状
    CGContextSetLineCap(context, kCGLineCapRound);
    //画笔颜色设置
    CGContextSetRGBStrokeColor(context, /255.0, /255.0, /255.0, );
    //开始绘制图片
    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==) {
    if ([self.spDelegate respondsToSelector:@selector(setFirstPasswordSuccess:)]) {
    [self.spDelegate setFirstPasswordSuccess:result];
    }
    }
    //NSLog(@“%i”,temp_signpaw); if (temp_signpaw!=&&temp_signpaw==[result integerValue]) {
    //正确跳转
    if ([self.spDelegate respondsToSelector:@selector(setPawSuccess:)]) {
    [self.spDelegate setPawSuccess:result];
    }
    }else if(temp_signpaw!=&&temp_signpaw!=[result integerValue]){
    //错误处理
    if([self.spDelegate respondsToSelector:@selector(setTwoPasswordError)]){
    [self.spDelegate setTwoPasswordError];
    }
    }
    }else{
    #pragma mark -已设置密码了
    NSInteger status = [userDefaults integerForKey:@“status”];
    if (status==-) {
    //调试状态
    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==) {
    NSInteger tempUpdate_signpaw = [userDefaults integerForKey:@“tempUpdate_signpaw”];
    if (tempUpdate_signpaw==) {
    if ([self.spDelegate respondsToSelector:@selector(updateSPFirst:)]) {
    [self.spDelegate updateSPFirst:result];
    }
    }
    if(tempUpdate_signpaw!=){
    if ([self.spDelegate respondsToSelector:@selector(updateSPConfirm:)]) {
    [self.spDelegate updateSPConfirm:result];
    }
    }
    }
    if(updateStatus!=){
    //判断是否为已成功输入手势密码
    if ([self.spDelegate respondsToSelector:@selector(setSuccessAfterFirstPS:)]) {
    [self.spDelegate setSuccessAfterFirstPS:result];
    }
    }
    }
    }
    }
    } @end