1、在App的开发中,各种验证码层出不穷。
现在主流的验证码方式是: 1、手机验证码:就是用户使用手机获取短信得到验证码,在输入App中。2、就是App 生成图形,展示在用户的手机上,用户根据图片展示输入验证码。下面我们就对第二种进行探究。
2、先看本博客实现的效果
3、呼朋唤友
群的特点:
1、iOS 开发交流群,每周都有更新新的内容。
2、群里有3~5年的资深开发者。
3、群员在App开发过程中遇到什么问题,可以在群里提问。
4、群员在App开发中,如果遇到难实现的功能或者模块,可以在群里提出,有人员帮助你实现。
5、加入群后,可以get到App 开发中的一些小功能模块。
群号是:185341804 群名字:成功QQ吧
群主号:1542100658 (qq)
4、代码展示
1》 工程中的使用代码
VerificationCodeLable * lable = [[VerificationCodeLable alloc]initWithFrame:CGRectMake(130, 100+ i*80, 100, 30)];
[self.view addSubview:lable];
/**
获取验证码的值
*/
-(void)getVerificationCodeValue{
/**
防止重复点击
*/
CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
CFAbsoluteTime saveTime = [[[NSUserDefaults standardUserDefaults] objectForKey:@"CurrentTime"] doubleValue];
if (startTime -saveTime >2000) {
[[NSUserDefaults standardUserDefaults] setObject:@(startTime) forKey:@"CurrentTime"];
[[NSUserDefaults standardUserDefaults] synchronize];
/**
创建接受数据
*/
responseData = [NSMutableData dataWithCapacity:0];
/**
可以重新获取验证码的值
*/
NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask * Task = [session dataTaskWithURL:[NSURL URLWithString:@""]];
[Task resume];
}
}
/**
颜色随机获取
@return 颜色对象
*/
-(UIColor*)colorAcquisition:(float)alpha{
CGFloat R,G,B = 0.0;
R = arc4random() % 255 /255.0;
G = arc4random() % 255 /255.0;
B = arc4random() % 255 /255.0;
UIColor * color = [UIColor colorWithRed:R green:G blue:B alpha:alpha];
return color;
}
/**
绘制背景线条
*/
-(void)drawBackLine:(CGRect)rect{
/**
获取上下文
*/
CGContextRef contextRef = UIGraphicsGetCurrentContext();
/**
色值画笔的宽度
*/
CGContextSetLineWidth(contextRef, 1.0f);
/**
获取绘制点
*/
for (unsigned i =0 ; i<8; i++) {
/**
获取画笔的颜色
*/
CGContextSetStrokeColorWithColor(contextRef, [self colorAcquisition:0.25f].CGColor);
/**
获取绘制的初始点
*/
float pX = arc4random() % (int)rect.size.width;
float pY = arc4random() % (int)rect.size.height;
/**
移动画笔
*/
CGContextMoveToPoint(contextRef, pX, pY);
float pend_X = arc4random() % (int)rect.size.width;
float pend_Y = arc4random() % (int)rect.size.height;
CGContextAddLineToPoint(contextRef, pend_X, pend_Y);
CGContextStrokePath(contextRef);
}
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
/**
计算单个字体的大小
*/
CGSize singleSize = [@"Z" sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}];
/**
单个字体剩余的宽
*/
CGFloat singleSurplusWeight = rect.size.width / verificationCodeString.length - singleSize.width;
/**
单个字体剩余的宽
*/
CGFloat singleSurplusHeight = rect.size.height - singleSize.height;
/**
获取绘制参数,并开始绘制
*/
float pX ,pY;
for (unsigned i = 0; i<verificationCodeString.length; i++) {
/**
随机获取绘制的点
*/
pX = arc4random() % (int)singleSurplusWeight + rect.size.width /verificationCodeString.length* i;
pY = arc4random() % (int)singleSurplusHeight;
/**
获取要绘制的字
*/
unichar objectChar = [verificationCodeString characterAtIndex:i];
NSString * drawStr = [NSString stringWithFormat:@"%c",objectChar];
/**
绘制对象
*/
[drawStr drawAtPoint:CGPointMake(pX, pY) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15],NSForegroundColorAttributeName:[self colorAcquisition:1.0]}];
}
/**
创建文本底线
*/
[self drawBackLine:rect];
}