2017-02-16 103 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