2017-02-16 101 views
2

我在一個應用程序中應該包含一個QR碼與信息,我知道如何做到這一點,但我必須設置從黑色到紅色的Qrcode的顏色和我所理解的應該很容易,但我找不到一個好的答案,使這成爲可能,我會讓我的代碼和我的屏幕的QrCode,謝謝。我怎樣才能改變我的QR碼的顏色

import UIKit 

class QRCodeViewController: UIViewController { 
    @IBOutlet weak var imgQRCode: UIImageView! 

    func generateQRCode(from string: String) -> UIImage? { 
     let data = string.data(using: String.Encoding.utf8) 
     if let filter = CIFilter(name: "CIQRCodeGenerator") { 
      filter.setValue(data, forKey: "inputMessage") 
      filter.setValue("H", forKey: "inputCorrectionLevel") 

      guard let qrCodeImage = filter.outputImage 
       else { 
        return nil 
      } 
      let scaleX = imgQRCode.frame.size.width/qrCodeImage.extent.size.width 
      let scaleY = imgQRCode.frame.size.height/qrCodeImage.extent.size.height 
      let transform = CGAffineTransform(scaleX: scaleX, y: scaleY) 

       if let output = filter.outputImage?.applying(transform) { 
        return UIImage(ciImage: output) 
       } 
      } 
      return nil 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let image = generateQRCode(from: "Este es el código generado") 
     imgQRCode.image = image 
    } 
} 

QRCODE

+0

任何狀態更新爲如果你有它的工作? – MwcsMac

回答

3

更改您的代碼是這樣的。

func generateQRCode(from string: String) -> UIImage? { 
    let data = string.data(using: String.Encoding.utf8) 
    if let filter = CIFilter(name: "CIQRCodeGenerator") { 
     guard let colorFilter = CIFilter(name: "CIFalseColor") else { return nil } 

     filter.setValue(data, forKey: "inputMessage") 

     filter.setValue("H", forKey: "inputCorrectionLevel") 
     colorFilter.setValue(filter.outputImage, forKey: "inputImage") 
     colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1") // Background white 
     colorFilter.setValue(CIColor(red: 1, green: 0, blue: 0), forKey: "inputColor0") // Foreground or the barcode RED 
     guard let qrCodeImage = colorFilter.outputImage 
      else { 
       return nil 
     } 
     let scaleX = imgQRCode.frame.size.width/qrCodeImage.extent.size.width 
     let scaleY = imgQRCode.frame.size.height/qrCodeImage.extent.size.height 
     let transform = CGAffineTransform(scaleX: scaleX, y: scaleY) 


     if let output = colorFilter.outputImage?.applying(transform) { 
      return UIImage(ciImage: output) 
     } 
    } 
    return nil 
} 

enter image description here