Есть ли способ добавить штрихкоды MicroQR как AVMetadataObject.ObjectType? - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно сканировать штрихкоды MicroQR с помощью камеры на устройствах iOS. Кто-нибудь знает родной способ добавить тип? Например, моя константа для buildins выглядит так: О да, я использую Swift

let supportedCodeTypes = [AVMetadataObject.ObjectType.upce, AVMetadataObject.ObjectType.code39,
                      AVMetadataObject.ObjectType.code39Mod43, AVMetadataObject.ObjectType.code93,
                      AVMetadataObject.ObjectType.code128, AVMetadataObject.ObjectType.ean8,
                      AVMetadataObject.ObjectType.ean13, AVMetadataObject.ObjectType.aztec,
                      AVMetadataObject.ObjectType.pdf417, AVMetadataObject.ObjectType.itf14,
                      AVMetadataObject.ObjectType.dataMatrix, AVMetadataObject.ObjectType.interleaved2of5,
                      AVMetadataObject.ObjectType.qr]

Я думаю, что смогу реализовать это следующим образом:

 let microqr = AVMetadataObject.ObjectType(rawValue: String)

Тогда я смогу добавить его в свой массив, но я не знаю, что поместить в качестве строки для rawValue :. Конечно, я даже не уверен, сработает ли это. Я был бы очень признателен за толчок в правильном направлении. Спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Нет - механизмы распознавания для AVCaptureMetadataOutput находятся в системном программном или аппаратном обеспечении, и Apple не предоставляет API для подключения собственного механизма для новых типов объектов.

Вы правы, что можно создать значение типа AVMetadataObject.ObjectType, используя инициализатор init(rawValue: String) и любую произвольную строку. Однако система AVCapture может действовать только на известные ей типы объектов - другие значения типа AVMetadataObject.ObjectType не имеют смысла для API, использующего этот тип. (Я не уверен, будут ли неизвестные значения ObjectType игнорироваться таким API или возникнет ошибка, но это легко проверить ...)

Другими словами, вызов AVMetadataObject.ObjectType(rawValue: "someNewBarcodeStandard") не учит AVCapture распознавать штрих-код такого типа, как AVMetadataObject.ObjectType(rawValue: "?") учит распознавать рыбу.

Кстати, вывод типа Swift означает, что вам не нужно выписывать каждое имя типа / константы с длинной рукой:

let supportedCodeTypes: [AVMetadataObject.ObjectType] = [.upce, .code39,
                  .code39Mod43, .code93,
                  .code128, .ean8,
                  .ean13, .aztec,
                  .pdf417, .itf14,
                  .dataMatrix, .interleaved2of5,
                  .qr]
...