【发布时间】:2015-12-27 16:44:21
【问题描述】:
我在使用CIQRCodeGenerator创建二维码时遇到问题:一开始生成二维码时很清晰,但是当我再次运行该函数时,使用相同的输入,二维码变得模糊:
初始运行(更清晰):
第二次运行(更模糊):
以下函数首先在viewWillAppear 中调用,随后在用户点击按钮后触发。
func generateQRCodeFromString(string: String) -> UIImage? {
let data = string.dataUsingEncoding(NSISOLatin1StringEncoding)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
filter.setValue("H", forKey: "inputCorrectionLevel")
let transform = CGAffineTransformMakeScale(10, 10)
if let output = filter.outputImage?.imageByApplyingTransform(transform) {
return UIImage(CIImage: output)
}
}
return nil
}
此处提供了说明问题的示例项目:http://jakeserver.com/Uploads/Apps/QR_Test.zip
在使用相同输入第二次运行该函数后 UIImage 变得模糊的原因是什么?
编辑 - 添加更多信息
override func viewDidLoad() {
super.viewDidLoad()
qrCode.image = generateQRCodeFromString("test", size: qrCode.frame.size);
}
override func viewWillLayoutSubviews() {
qrCodeWidth.constant = self.view.frame.width * 0.8;
}
@IBAction func buttonTapped(sender: AnyObject) {
qrCode.image = generateQRCodeFromString("test", size: qrCode.frame.size);
}
【问题讨论】:
-
In
viewDidLoadqrCode.frame.size可能是不正确的大小。也许将其移至viewDidLayoutSubviews?另外,我认为您应该在viewWillLayoutSubviews中致电super。 -
@AaronBrager 感谢您的所有帮助。我认为将调用移入 didLayout 方法可以在这种情况下修复它。我还有一个更快速的问题:是否有可能让它比现在更清晰?即使是 2 级,它仍然显得有些模糊。
-
@AaronBrager 我找到了后续问题的答案,我必须将比例线中的宽度和高度值加倍。再次感谢您的所有帮助。
-
顺便说一句,你不需要
qrCodeWidth.constant = self.view.frame.width * 0.8——你可以用乘数创建一个“等宽”约束 -
@AaronBrager 内存/处理器效率更高吗?
标签: ios swift uiimageview uiimage core-image