美文网首页
自定义验证码视图(OC)

自定义验证码视图(OC)

作者: hoggenWang | 来源:发表于2016-10-28 16:30 被阅读40次

混淆的验证码视图,是我们日常经常用到的功能模块之一,一般来说后台不会直接返回我们验证码的图片,一般需要我们将字符串信息转换成我们需要的视图;不管是转换成View还是button,这里介绍一个比较简单的方法,重写

- (void)drawRect:(CGRect)rect

这里一般需要两个步骤,一是重写字符串的字体大小、颜色、样式等
首先计算每个字符显示的位置

    NSString *text  =  [NSString stringWithFormat:@"%@", self.verifyCode];
    
    CGSize cSize  =  [@"A" sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20]}];
    
    int width  =  rect.size.width/text.length - cSize.width;
    int height  =  rect.size.height - cSize.height;

设置字符串的字体大小、颜色

 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];
        
        UIFont *randomFont = [UIFont systemFontOfSize:arc4random() % 5 + 15];
        [textC drawAtPoint:point withAttributes:@{NSFontAttributeName : randomFont}];
    }

当然这样还是完全不够的,还需要我们绘制干扰线

 CGContextRef context  =  UIGraphicsGetCurrentContext();
    //设置线条宽度
    CGContextSetLineWidth(context, kLineWidth);
    
    //绘制干扰线
    for (int i  =  0; i < kLineCount; i++)
    {
        UIColor *randomColor = [UIColor colorWithRed:arc4random() % 256 / 256.0 green:arc4random() % 256 / 256.0 blue:arc4random() % 256 / 256.0 alpha:1.0];
        CGContextSetStrokeColorWithColor(context, randomColor.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);
    }

相关文章

  • 自定义验证码视图(OC)

    混淆的验证码视图,是我们日常经常用到的功能模块之一,一般来说后台不会直接返回我们验证码的图片,一般需要我们将字符串...

  • swift自定义验证码视图

    前面的文章里面有关于自定义验证码视图OC相关的代码,在swift_3中,大体上的结构都是相同的,只是因为swift...

  • Django用户登录的实现及随机验证码功能

    Django用户登录的实现及随机验证码功能 使用自带的登录视图 登录URL settings中创建登录链接 自定义...

  • OC 中的block

    简介:block作为消息传递,在oc中的用处非常的广,自定义视图的回调,modal视图的回调,多线程中异步去加载数...

  • CI框架基础入门(三)

    目录 文件上传 缩略图 载入分页类 验证码 加密密钥 session类 登录验证 拓展自定义公共类 载入公共视图 ...

  • iOS-自定义视图

    自定义视图 自定义视图:系统标准UI之外,自己组合而出的新的视图。自定义视图的优点:iOS提供了很多UI组件,借助...

  • OC下的自定义Button

    用OC实现自定义按钮的图片和文字布局 实现按钮中的文字和图片自定义布局的方法很简单,只要在按钮添加到父视图之前获取...

  • 自定义验证码视图(Swift)

    混淆的验证码视图,是我们日常经常用到的功能模块之一,一般来说后台不会直接返回我们验证码的图片,一般需要我们将字符串...

  • SpringSecurity自定义认证

    一. 前言 二. 自定义邮件验证码认证 0. 说明 自定义一个邮箱验证码的认证,将邮箱号码作为key,验证码作为v...

  • 高级UI<第十一篇>:视图的摆放(onLayout)

    视图摆放,即自定义视图onLayout的实现,当自定义一个视图时,基本都会重写onMeasure、onLayout...

网友评论

      本文标题:自定义验证码视图(OC)

      本文链接:https://www.haomeiwen.com/subject/xndeuttx.html