IOS 学习笔记 2015
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:39
//
// 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(@"初始化界面布局执行的");<br/>
for (int index=; index<=; index++) {<br/>
//创建按钮<br/>
UIButton *numberButton = [[UIButton alloc] init];<br/>
//设置按钮的背景图片,并且设置是在何种状态下<br/>
[numberButton setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];<br/>
[numberButton setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] 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<self.allButtonsArray.count; index++) {<br/>
CGFloat inverst_top = KSCREEN_HEIGHT/;<br/>
inverst_top=;<br/>
UIButton *btn =(UIButton *) self.allButtonsArray[index];<br/>
//NSLog(@"%i",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
- 上一篇: iOS:iOS开发系列–打造自己的“美图秀秀”(上)
- 下一篇: ios 微信唤起app
相关文章
-
iOS:iOS开发系列–打造自己的“美图秀秀”(上)
iOS:iOS开发系列–打造自己的“美图秀秀”(上)
- 互联网
- 2026年04月04日
-
iOS:iOS开发系列–打造自己的“美图秀秀”(中)
iOS:iOS开发系列–打造自己的“美图秀秀”(中)
- 互联网
- 2026年04月04日
-
Ios16 app不能全屏,上下有黑边
Ios16 app不能全屏,上下有黑边
- 互联网
- 2026年04月04日
-
ios 微信唤起app
ios 微信唤起app
- 互联网
- 2026年04月04日
-
iOS 图片部分模糊,类似于美图秀秀
iOS 图片部分模糊,类似于美图秀秀
- 互联网
- 2026年04月04日
-
iOS 如何适配iOS10
iOS 如何适配iOS10
- 互联网
- 2026年04月04日








