Swift 4 上的条形码

2023-11-26

我正在尝试将 mi 应用程序升级到 swift 4,但条形码读取器无法工作。

我已经隔离了条形码读取器代码,但仍然无法工作。相机可以工作,但无法检测到条形码。

该代码在 swift 3 iOS 10 上运行得很好。

这是完整的代码

import AVFoundation
import UIKit

class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
var captureSession: AVCaptureSession!
var previewLayer: AVCaptureVideoPreviewLayer!

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = UIColor.black
    captureSession = AVCaptureSession()

    let videoCaptureDevice = AVCaptureDevice.default(for: AVMediaType.video)
    let videoInput: AVCaptureDeviceInput

    do {
        videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice!)
    } catch {
        return
    }

    if (captureSession.canAddInput(videoInput)) {
        captureSession.addInput(videoInput)
    } else {
        failed();
        return;
    }

    let metadataOutput = AVCaptureMetadataOutput()

    if (captureSession.canAddOutput(metadataOutput)) {
        captureSession.addOutput(metadataOutput)

        metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
        metadataOutput.metadataObjectTypes = [AVMetadataObject.ObjectType.ean8, AVMetadataObject.ObjectType.ean13, AVMetadataObject.ObjectType.pdf417]
    } else {
        failed()
        return
    }

    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession);
    previewLayer.frame = view.layer.bounds;
    previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill;
    view.layer.addSublayer(previewLayer);

    captureSession.startRunning();
}

func failed() {
    let ac = UIAlertController(title: "Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.", preferredStyle: .alert)
    ac.addAction(UIAlertAction(title: "OK", style: .default))
    present(ac, animated: true)
    captureSession = nil
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if (captureSession?.isRunning == false) {
        captureSession.startRunning();
    }
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    if (captureSession?.isRunning == true) {
        captureSession.stopRunning();
    }
}

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
    captureSession.stopRunning()

    if let metadataObject = metadataObjects.first {
        let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject;

        AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
        found(code: readableObject.stringValue!);
    }

    dismiss(animated: true)
}

func found(code: String) {
    print(code)
}

override var prefersStatusBarHidden: Bool {
    return true
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}
}

我在 iPhone 上使用 iOS 11,已升级至 beta 9。

任何想法?谢谢。


我明白了,但苹果并没有说得那么明显。委托 AVCaptureMetadataOutputObjectsDelegate 的回调函数已重命名,并且参数名称不同!

所以,更换

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!)

to

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection)

此后,我的视图控制器现在像以前一样扫描二维码。它具有相同的参数,但第一个参数名称不同。更改函数和参数名称并构建/运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 4 上的条形码 的相关文章

  • 快速for循环与睡眠

    我有一个 Swift 4 ios 应用程序 按下按钮时会显示随机消息和照片 这工作正常 但我想创建一个无限循环来在按下按钮时显示随机消息 照片 我尝试了多种方法来实现这一目标 但没有一个有效 在主线程完成之前 标签和图像视图似乎不会更新 下
  • 条形码(Code 128)字体有问题无法扫描

    很容易生成一个3 of 9 http www squaregear net fonts free3of9 shtml条形码使用Font Font f new Font Free 3 of 9 80 this Font f Label l n
  • CoreData fetch() 返回无序的对象

    我有一个具有名称的实体 出于测试目的 我按照最近添加 0 到最旧添加对象的顺序命名它们 当我第一次启动应用程序时 它按顺序加载我的实体 0 1 2 但如果我更改任何实体的名称属性 顺序就会混乱 我使用 numberOfRows tablev
  • AVCaptureSession 音频不适用于长视频

    我正在使用 AVCaptureSession 录制带有音频的视频 对于短视频来说一切似乎都正常 但由于某种原因 如果我录制的视频长度超过 12 秒左右 音频就不起作用 Edit 因为这个答案仍然得到点赞 这个答案可以缓解问题 但问题的可能根
  • iOS 11:蜂窝信号强度

    我正在获取蜂窝信号强度 iOS let statusBarView UIApplication shared value forKey statusBar as UIView if let foregroundView statusBarV
  • 在swift ios中多线程并行执行多个任务

    我知道队列的创建并且能够执行单个任务 但如何并行执行多个任务 并发队列 gt let concurrentQueue DispatchQueue label com some concurrentQueue attributes concu
  • 任何免费的 UPC/条形码 DB [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何应用iOS VNImageHomographicAlignmentObservation warpTransform?

    我正在测试 Apple 的 Vision Alignment API 并对 VNHomgraphicImageRegistrationRequest 有疑问 有人让它工作吗 我可以从中得到 warpTransform 但我还没有看到一个有意
  • Swift 4 JSON Codable - 返回的值有时是一个对象,其他是一个数组

    我从 API 获取的数据返回单个对象 但当有多个对象时 它会返回同一键中的数组 对于我正在使用的当前模型 结构 当数组出现时解码会失败 这些结果是随机排序的 这意味着我不知道何时会收到对象或数组 有没有办法创建一个模型 考虑到这一事实 并可
  • Apple 推送通知 (APN) 不一致?

    通过 APN 使用 Apple 的推送通知时 我们遇到了一个令人困惑的问题 我们有以下场景 我猜是相当标准的 当我们的应用程序 我们在这里称之为 MyApp 首次安装并启动时 我们会请求用户授予通过 MyApp 向他发送推送通知的权限 在此
  • Swift 与 Objective C 指针操作问题

    我在 Objective C 中有这段代码 运行良好 list controller gt audioBufferList list gt mBuffers 0 mDataByteSize inNumberFrames kSampleWor
  • 将 CMSampleBuffer 转换为 UIImage

    这是一个将 CMSampleBuffer 转换为 UIImage 的函数 来自 Apple 文档的代码 func imageFromSampleBuffer sampleBuffer CMSampleBuffer gt UIImage Ge
  • UIApplication.registerForRemoteNotifications() 必须仅从主线程调用

    Xcode 9 iOS 11 在注册推送 远程 通知时向我显示错误 警告 这是错误消息 这是我尝试过的代码 let center UNUserNotificationCenter current center delegate self c
  • iOS 11 文件提供程序扩展中的项目

    我有一个带有文件提供程序扩展名的应用程序 我尝试使用此方法为 ios 11 的新文件应用程序提供支持link https developer apple com documentation fileprovider content and
  • 将 tiff 像素长宽比更改为正方形

    我正在尝试对多页 tiff 文件执行条形码识别 但是 tiff 文件是从传真服务器 我无法控制 发送给我的 该服务器以非方形像素长宽比保存 tiff 这导致图像由于纵横比而被严重挤压 我需要将 tiff 转换为方形像素长宽比 但不知道如何在
  • 来自字符串的 Swift Keypath

    有没有办法在 Swift 4 中从字符串创建 Keypath 以通过路径或变量名访问结构中的值 最后我发现我应该使用 CodingKeys 而不是 KeyPaths 通过 String 访问结构体变量的值 提前致谢 迈克尔 考虑你有这样的东
  • 使用 Swift PDF417 解码并生成相同的条形码

    我有以下 PDF417 条形码示例 可以使用在线工具进行解码 例如zxing https zxing org w decode jspx 结果如下 5wwwwwxwww0app5p3pewi0edpeapifxe0ixiwwdfxxi0xf
  • ZXing 无法正确读取巴西条形码钞票(交错的 2 个,共 5 个)。我该如何修复它?

    我使用 XZing 2 3 0 读取 ITF 条形码 但 ZXing 无法正确读取 47 位巴西钞票 以下示例条形码图像 可以在这里找到 http www shimatai com br images boleto png 被读作03391
  • 无法构建 Objective-C 模块“Firebase”

    我收到此错误的原因是import Firebase 无法构建 Objective C 模块 Firebase Xcode 还抱怨 FirebaseAnalytics 说 找不到 FirebaseAnalytics FirebaseAnaly
  • ios Vision VNImageRequestHandler方向问题

    我正在尝试使用相机通过相机检测脸部VNImageRequestHandler iOS 愿景 当我在横向模式下用相机指向照片时 它会检测到面部 但方向模式相反 let detectFaceRequestHandler VNImageReque

随机推荐

  • 在自定义视图/uiview子类上实现iphone的复制/粘贴控件

    我承认 在 S O 上已经有一个完全符合这些思路的问题 但它缺乏实现细节 有效的答案 而且我想更具体 所以我认为应该提出一个新问题 显然 如果我错了 请告诉我 我们可以尝试重新启动那里的线程 基本上 当用户按住标签时 我想将 UILabel
  • 通过 HTTPS 使用 Web 服务时抛出 System.Net.WebException

    当使用 HTTPS 调用服务器上运行的 Web 服务时 我的应用程序抛出 System Net WebException 并显示消息 底层连接已关闭 无法与远程服务器建立信任关系 我不确定如何解决此问题并成功拨打电话 经过一番研究 我发现了
  • gcc: printf 和 long double 会导致错误的输出。 [C - 类型转换混乱]

    我对 C 相当陌生 我尝试为 Vector 编写函数 但一定有问题 这是代码 Defines maths for particles include
  • 使用ant或Eclipse编译时出现多个dex文件错误

    我无法构建我的应用程序 我正在运行今天下载的最新构建工具 这种情况在更新后开始发生 dex dex Converting compiled files and external libraries into Users rob Repos
  • 查看 Maven 工件上的 PGP 签名

    我想手动验证来自 Central 的 Maven 工件上的 PGP 签名 但我不知道从哪里开始 我在 Apache 上看到将工件上传到中央存储库的指南它说 我们要求您为所有工件提供 PGP 签名 我看到 Sonatype 的 Nexus P
  • Xamarin - 将命令绑定到用户控件内对象的属性

    几天前我开始学习 XAML 但我很难解决这个问题 在 Xamarin Forms 中 我想创建一个用户控件 其中包含一个标签和一个按钮 并且能够从使用我的用户控件的另一个页面将命令绑定到 XAML 中的用户控件 我目前遇到异常 Xamari
  • 在 ng-repeat 期间添加引导行

    我有一种情况 我有一个要在各个面板中显示的数据列表 使用 Bootstrap 的网格系统 我想利用宽屏幕并水平显示多个面板 但在窄屏幕上让它们堆叠 我目前正在使用这样的 ejs 在服务器端布局 列作为查询参数传入 通常设置为 2 或 3 因
  • Map的keySet()和entrySet()的性能考虑

    All 谁能告诉我两者之间的性能问题到底是什么 网站 代码牧场简要概述了使用 keySet 和 get 时所需的内部调用 但如果任何人都可以提供有关使用 keySet 和 get 方法时流程的准确详细信息 那就太好了 这将帮助我更好地理解性
  • 导致此异常的原因 java.lang.RuntimeException: java.lang.NoSuchMethodException: [class android.view.View]

    我的方法有问题firebase项目 我按照以下步骤操作firebaseGitHub 文档 但我遇到了这个异常 java lang RuntimeException java lang NoSuchMethodException
  • 用于 GADT 的 makeLenses (Haskell)

    是否有相当于makeLenses对于 GADT 如果我有一个简单的GADT like data D a b where D Ord a Ord b gt a gt b gt D a b 有没有办法通过传入构造函数和字段名称列表来自动生成镜头
  • Interface Builder 中 UIButton 的活力效果

    我的一个视图控制器中有一些模糊且充满活力的视觉效果视图 我的标签可以正常工作 充满活力 但每次我尝试向视图添加 UIButton 时 文本似乎是透明的 并且按钮的背景似乎有活力 我正在寻找 编辑 按钮在通知中心的效果 我附上了一些照片供参考
  • Facebook 登录注销在尝试再次登录时出现无效密钥哈希错误

    我有一个简单的 Facebook 登录 注销活动 运行成功 然而 在我从应用程序注销后 我尝试再次登录 但 facebook 给出了无效的密钥哈希错误 请注意 我第一次登录并注销成功 但在我注销并尝试再次登录后 Facebook 给出了该错
  • jQuery 滚动到 Div

    我正在制作一个常见问题解答页面 顶部有按钮可以跳转到某个类别 它会跳转到p我用作类别标签的标签 例如 p 对于我的一般类别 我不想直接跳到类别 而是想添加滚动效果 我想要类似的东西http www dynamicdrive com dyna
  • Dplyr summarise_each 聚合结果

    我有一个这样的数据框 metric1 metric2 metric3 field1 field2 1 1 07809668 4 2569882 7 1710095 L S1 2 0 56174763 1 2660273 0 3751915
  • 使用 python 和 eyes3 创建新的 ID3 标签

    我有一堆根本没有 ID3 标签的 mp3 文件 我正在尝试使用 eyed3 向文件添加 ID3 标签 但不知道使用什么方法 这是我的代码 import eyed3 file eyed3 load test mp3 file tag arti
  • Android - Activity 构造函数与 onCreate

    据我了解 安卓Activities有特定的生命周期onCreate应该被覆盖并用于初始化 但是构造函数中到底发生了什么 是否存在您可以 应该覆盖的情况Activity构造函数也是如此 或者你永远不应该碰它 我假设构造函数永远不应该被使用 因
  • Socket Java 客户端 - Python 服务器

    我正在尝试实现一个 java python 客户端 服务器套接字 客户端是java写的 服务端是python写的 Java客户端 import java io import java net import java lang public
  • AS3:定义命中区域

    我有一个包含位图的影片剪辑 我不想增加命中区域 我知道我可以在它后面添加一个透明形状 但这将通过 ios 的空气进行编译 我不想导致不必要的重绘 有没有办法将矩形定义为点击区域或其他解决方案 有一个特殊的 hitArea 字段用于此目的 c
  • ASP.net 通过内容页访问母版页变量

    我有一个母版页 然后我有一个公共变量 public partial class AdminMaster System Web UI MasterPage protected bool blnShowDialogue false In my
  • Swift 4 上的条形码

    我正在尝试将 mi 应用程序升级到 swift 4 但条形码读取器无法工作 我已经隔离了条形码读取器代码 但仍然无法工作 相机可以工作 但无法检测到条形码 该代码在 swift 3 iOS 10 上运行得很好 这是完整的代码 import