###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,喜欢的小伙伴可以给星支持一下~~谢谢