2019独角兽企业重金招聘Python工程师标准>>>
###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.charCountlet 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.0var 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,喜欢的小伙伴可以给星支持一下~~谢谢