自定義驗證碼視圖(Swift)

混淆的驗證碼視圖,是我們日常經常用到的功能模塊之一,一般來說后臺不會直接返回我們驗證碼的圖片,一般需要我們將字符串信息轉換成我們需要的視圖;不管是轉換成View還是button,這里介紹一個比較簡單的方法,重寫

override func draw(_ rect: CGRect) 

這里一般需要兩個步驟,一是重寫字符串的字體大小、顏色、樣式等
首先計算每個字符顯示的位置

  let text :String = String.init(format: "\(self.verifyCode)")

        let cSize: CGSize = "A".size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 20)])
        let width = rect.size.width/CGFloat(text.characters.count) - cSize.width
        let hight = rect.size.height - cSize.height
        

設置字符串的字體大小、顏色

  for index in 0..<text.characters.count {
            pX = CGFloat(arc4random()%UInt32(width)) + rect.size.width/CGFloat(text.characters.count)*CGFloat(index)
            pY = CGFloat(arc4random()%UInt32(hight))
            point = CGPoint(x: pX!, y: pY!)
            let c = text.index(text.startIndex, offsetBy: index)
            let textC :String = String.init(format: "%C", c as! CVarArg)
            let randomFont = UIFont.systemFont(ofSize:CGFloat(arc4random()%5+15))
            textC.draw(at: point!, withAttributes: [NSFontAttributeName:randomFont])

            
        }

當然這樣還是完全不夠的,還需要我們繪制干擾線

    let context = UIGraphicsGetCurrentContext()
        context!.setLineWidth(CGFloat(kLineWith));
        
        for _ in 0..<kLineCount {
            let randomCorlor = UIColor.init(colorLiteralRed: Float(arc4random()%255)/Float(255.0), green: Float(arc4random()%255)/Float(255.0), blue: Float(arc4random()%255)/Float(255.0), alpha: 1.0)
            context?.setStrokeColor(randomCorlor.cgColor)
            //起點
            pX = CGFloat(arc4random()%UInt32(rect.size.width))
            pY = CGFloat(arc4random()%UInt32(rect.size.height))
            context?.move(to: CGPoint(x: pX!, y: pY!))
            //終點
            pX = CGFloat(arc4random()%UInt32(rect.size.width))
            pY = CGFloat(arc4random()%UInt32(rect.size.height))
            context?.addLine(to: CGPoint(x: pX!, y: pY!))
            context?.strokePath();
            
        }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評論 18 399
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 混淆的驗證碼視圖,是我們日常經常用到的功能模塊之一,一般來說后臺不會直接返回我們驗證碼的圖片,一般需要我們將字符串...
    hoggenWang閱讀 208評論 0 0
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,252評論 4 61
  • 今天早上鬧鐘響后,不是馬上起床,是好想睡覺,好想不寫晨讀感悟。 今天注定寫得不好!我現在還想睡覺。 今天主題是冥想...
    莉萍LP閱讀 121評論 0 1