温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在iOS中实现生成图片数字字母验证效果

发布时间:2021-06-11 16:59:02 来源:亿速云 阅读:245 作者:Leah 栏目:移动开发

这篇文章给大家介绍怎么在iOS中实现生成图片数字字母验证效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

#import "CaptchaView.h" #define kRandomColor [UIColor colorWithRed:arc4random() % 256 / 256.0 green:arc4random() % 256 / 256.0 blue:arc4random() % 256 / 256.0 alpha:1.0]; //#define kRandomColor [UIColor grayColor]; #define kLineCount 6 #define kLineWidth 1.0 #define kCharCount 4 #define kFontSize [UIFont systemFontOfSize:arc4random() % 5 + 15] @implementation CaptchaView @synthesize changeString,changeArray; - (instancetype)initWithFrame:(CGRect)frame {   if (self = [super initWithFrame:frame]) {     self.layer.cornerRadius = 5.0; //设置layer圆角半径     self.layer.masksToBounds = YES; //隐藏边界     self.backgroundColor = kRandomColor;     //    [UIColor grayColor]     //显示一个随机验证码     [self changeCaptcha];   }   return self; } #pragma mark 更换验证码,得到更换的验证码的字符串 -(void)changeCaptcha {   //<一>从字符数组中随机抽取相应数量的字符,组成验证码字符串   //数组中存放的是全部可选的字符,可以是字母,也可以是中文   self.changeArray = [[NSArray alloc] initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z",nil];   //如果能确定最大需要的容量,使用initWithCapacity:来设置,好处是当元素个数不超过容量时,添加元素不需要重新分配内存   NSMutableString *getStr = [[NSMutableString alloc] initWithCapacity:kCharCount];   self.changeString = [[NSMutableString alloc] initWithCapacity:kCharCount];   //随机从数组中选取需要个数的字符,然后拼接为一个字符串   for(int i = 0; i < kCharCount; i++)   {     NSInteger index = arc4random() % ([self.changeArray count] - 1);     getStr = [self.changeArray objectAtIndex:index];     self.changeString = (NSMutableString *)[self.changeString stringByAppendingString:getStr];   } } #pragma mark 点击view时调用,因为当前类自身就是UIView,点击更换验证码可以直接写到这个方法中,不用再额外添加手势 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {   //点击界面,切换验证码   [self changeCaptcha];   //setNeedsDisplay调用drawRect方法来实现view的绘制   [self setNeedsDisplay]; } #pragma mark 绘制界面(1.UIView初始化后自动调用; 2.调用setNeedsDisplay方法时会自动调用) - (void)drawRect:(CGRect)rect {   // 重写父类方法,首先要调用父类的方法   [super drawRect:rect];   //设置随机背景颜色   self.backgroundColor = kRandomColor;   //获得要显示验证码字符串,根据长度,计算每个字符显示的大概位置   NSString *text = [NSString stringWithFormat:@"%@",self.changeString];   CGSize cSize = [@"S" sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20.0]}];   int width = rect.size.width / text.length - cSize.width;   int height = rect.size.height - cSize.height;   CGPoint point;   //依次绘制每一个字符,可以设置显示的每个字符的字体大小、颜色、样式等   float pX, pY;   for (int i = 0; i < text.length; i++)   {     pX = arc4random() % width + rect.size.width / text.length * i;     pY = arc4random() % height;     point = CGPointMake(pX, pY);     unichar c = [text characterAtIndex:i];     NSString *textC = [NSString stringWithFormat:@"%C", c];     [textC drawAtPoint:point withAttributes:@{NSFontAttributeName:kFontSize}];   }     //调用drawRect:之前,系统会向栈中压入一个CGContextRef,调用UIGraphicsGetCurrentContext()会取栈顶的CGContextRef     CGContextRef context = UIGraphicsGetCurrentContext();     //设置画线宽度     CGContextSetLineWidth(context, kLineWidth);     //绘制干扰的彩色直线     for(int i = 0; i < kLineCount; i++)     {       //设置线的随机颜色       UIColor *color = kRandomColor;       CGContextSetStrokeColorWithColor(context, [color CGColor]);       //设置线的起点       pX = arc4random() % (int)rect.size.width;       pY = arc4random() % (int)rect.size.height;       CGContextMoveToPoint(context, pX, pY);       //设置线终点       pX = arc4random() % (int)rect.size.width;       pY = arc4random() % (int)rect.size.height;       CGContextAddLineToPoint(context, pX, pY);       //画线       CGContextStrokePath(context);     } } @end

关于怎么在iOS中实现生成图片数字字母验证效果就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ios
AI