У меня возникла проблема с использованием CIQRCodeGenerator
, чтобы создать QR-код: когда я сначала генерирую код, он четкий, но когда я снова запускаю функцию с тем же вводом, QR-код становится размытым :CIQRCodeGenerator Предоставление несогласованных результатов
Initial Run (более понятно):
Второй Run (более размыто):
Следующая функция сначала вызывается в 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 становится расплывчатой после того, как функция выполняется второй раз с тем же входом?
EDIT - Добавлена дополнительная информация
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);
}
В 'viewDidLoad'' qrCode.frame.size', вероятно, неправильный размер. Может быть, переместить это в 'viewDidLayoutSubviews'? Кроме того, я думаю, вы должны называть 'super' в' viewWillLayoutSubviews'. –
@AaronBrager Спасибо за вашу помощь. Я думаю, что перемещение вызова в метод didLayout исправил его в этом экземпляре. У меня был еще один быстрый вопрос: можно ли сделать его более резким, чем в настоящее время? Даже со шкалой 2, она по-прежнему выглядит немного расплывчатой. –
@AaronBrager Я понял ответ на мой вопрос о последующей работе, мне пришлось удвоить значения ширины и высоты в линии шкалы. Еще раз спасибо за вашу помощь. –