本地生成验证码

###swift本地生成验证码

  • 先上效果图

本地验证码

####1.创建工程,新建一个继承UIView的类

####2.重写init方法,实现初始化的时候调用changeVerifyCode()方法,产生随机验证码.

func changeVerifyCode() {
       verifyStr = ""
       // 根据数量,产生一个随机的字符串作为验证码
       for _ in 0..<charCount {
           let index = ranNum(charsArr.count)
           verifyStr?.appendContentsOf(charsArr[index])
       }         
 }

####3.重写touchesBegan方法,实现点击切换验证码

// MARK: - 重写点击方法重新获取
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        // 重新获取随机字符串
        self.changeVerifyCode()
        // 重新绘制
        self.setNeedsDisplay()
}

####4.重写drawRect(rect: CGRect)方法,绘制验证码图案

  • 随机变换颜色,绘制字符串
    // 随机颜色
    self.backgroundColor = randomColor()
    // 获取每个字符需要的宽度
    let width:Int = Int(self.frame.size.width) / self.charCount
    let height = Int(self.frame.size.height)
    // 绘制每一个字
    for (index,text) in  self.verifyStr!.characters.enumerate(){
        // 随机x位置
        let pX = CGFloat(index * width + self.ranNum(width) / 2)
        // 随机y位置
        let pY = CGFloat(self.ranNum(height)/2)
        // 获取每一个字符
        let textStr = String.init(text)
        // 随机字体大小
        let fontSize = CGFloat(self.ranNum(10) + 15)
        let font = UIFont.systemFontOfSize(fontSize)
        // 绘制
        textStr.drawAtPoint(CGPointMake(pX, pY), withAttributes:[NSFontAt  tributeName:font])
}
  • 绘制几条干扰线
    // 绘制干扰线
    // 获取drawRect的上下文
    let context = UIGraphicsGetCurrentContext()
    // 画线宽度
    CGContextSetLineWidth(context, 1.0)
    for _ in 0..<5 {
        // 随机颜色
        CGContextSetStrokeColorWithColor(context, self.randomColor().CGColor)
        var pX:CGFloat = 0.0
        var pY:CGFloat = 0.0
        // 起点
        pX = CGFloat(self.ranNum(Int(rect.size.width)))
        pY = CGFloat(self.ranNum(Int(rect.size.height)))
        CGContextMoveToPoint(context, pX, pY)
        // 终点
        pX = CGFloat(self.ranNum(Int(rect.size.width)))
        pY = CGFloat(self.ranNum(Int(rect.size.height)))
        CGContextAddLineToPoint(context, pX, pY)
        // 画线
        CGContextStrokePath(context)            
}

####5.在ViewController中创建对象,并且添加相应控件,在按钮的点击事件中验证对错.

func btnClick(sender:UIButton) {
    
    verifyStr = verifyView.verifyStr!
    var tip = ""
    // 忽略大小写,判断验证码正误
    if self.verifyText.text?.uppercaseString == self.verifyStr.uppercaseString {
            tip = "正确"
        }else {
            tip = "错误"
        }  
    // 弹出alert提示            
    let alert = UIAlertController(title: "提示", message: tip, preferredStyle: .Alert)
    let action = UIAlertAction(title: "确定", style: .Default, handler: nil)
    alert.addAction(action)
    self.presentViewController(alert, animated: true, completion: nil)
}
  • 这样本地验证码就完成, 最后附上github地址:本地验证码demo,喜欢的小伙伴可以给星支持一下~~谢谢

转载于:https://my.oschina.net/ozawa4865/blog/715227

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值