Защита вашего кода от COVID.

Во время этой пандемии вы, вероятно, видели, как многие рестораны используют QR-коды для своего меню, чтобы избежать использования картонных меню, которые могут быть заражены другими клиентами. Сегодня я быстро расскажу, как использовать QR-коды (быстрые ответы) и даже обычные штрих-коды в Swift.

Как мы создаем QR-коды или штрих-коды?

Для генерации QR-кодов или штрих-кодов нам понадобится структура CoreImage, которая используется для генерации изображений и применения фильтров, но мы справимся, просто импортировав вместо этого UIKit.

Странная вещь в использовании фильтров CoreImage заключается в том, что они инициализируются строкой из протокола генератора, который вы хотите использовать. Вот официальный список протоколов генератора из Документов Apple.

Вы заметите, что я принудительно развернул некоторые вещи здесь - на самом деле вы можете просто использовать optionals, guard let и т. Д. Я действительно посмотрел вокруг, можем ли мы использовать kCIIAttribute вместо inputMessage, но я не Ничего не нахожу. Дайте мне знать в разделе комментариев, если вы знаете обходной путь, чтобы не использовать здесь строки. Помимо не очень крутых строк для CIFilter и ключа, единственное, что мы сделали, - это масштабировали сгенерированный ciImage, чтобы он стал немного более заметным после его назначения. в UIImageView.

При создании штрих-кода это почти тот же фрагмент, но имя CIFilter будет CICode128BarcodeGenerator

Как мы читаем QR-код или штрих-код?

Когда мы хотим прочитать QR-код или штрих-код, нам нужно установить входящий поток данных: сеанс захвата.

Мы будем использовать AVCaptureVideoPreviewLayer, чтобы увидеть, что мы сканируем. Он будет инициализирован сеансом захвата, поэтому я использовал ленивую инициализацию.

На viewDidLoad мы настраиваем сеанс с камерой устройства в качестве входа и с выходом. В выводе мы можем указать, что ищем, в metadataObjectTypes. После того, как мы установим делегат объектов метаданных, мы сможем реализовать metadataOutput(output:didOutput:fromConnection), который предоставит нам обнаруженные метаданные, которые мы выбрали.

Вместо этого для определения штрих-кодов - тот же процесс. Но вместо .qr как metadataObjectTypes используйте .code128