修复警告:[相机]尝试使用不支持的设备更改为肖像模式(BackDual)

2024-01-02

我有一个UICollectionView with a CameraCell作为第一个单元格,它显示相机预览。

我想修复 XCode 控制台中的警告iOS 16, iPhone XS Max配备双后置摄像头:

[Camera] Attempted to change to mode Portrait with an unsupported device (BackDual). Auto device for both positions unsupported, returning Auto device for same position anyway (BackAuto).

它出现在之后UICollectionViewCell相机预览显示在屏幕上(不是当CameraCell被建造)。我尝试子类化UIImagePickerController并防止任何方向改变 - 没有帮助。

My CameraCell code:

final class CameraCell: UICollectionViewCell {
    static var reuseIdentifier: String {
        String(describing: CameraCell.self)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        setupView()
        NSLogIfDebug("[CameraCell] Init")
    }

    @available(*, unavailable)
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    deinit {
        NSLogIfDebug("[CameraCell] Deinit")
    }

    private lazy var imagePickerController: UIImagePickerController = {
        let imgPicker = UIImagePickerController()
        imgPicker.delegate = self
        imgPicker.sourceType = .camera
        imgPicker.cameraDevice = .rear
        imgPicker.allowsEditing = false
        imgPicker.showsCameraControls = false
        imgPicker.cameraViewTransform = Constants.cameraViewTransform

        return imgPicker
    }()

    private lazy var cameraContainerView: UIView = {
        let view = UIView(frame: .zero)
        view.clipsToBounds = true
        view.translatesAutoresizingMaskIntoConstraints = false
        view.isUserInteractionEnabled = true

        return view
    }()

    private lazy var cameraView: UIView = {
        // Used to return a dummy view on iPhone Simulator
        let isCameraDeviceAvailable = UIImagePickerController.isCameraDeviceAvailable(UIImagePickerController.CameraDevice.rear)

        guard isCameraDeviceAvailable, let view = imagePickerController.view else {
            let dummyView = UIView(frame: .zero)
            dummyView.translatesAutoresizingMaskIntoConstraints = false
            return dummyView
        }
        
        view.frame = .zero
        view.translatesAutoresizingMaskIntoConstraints = false

        return view
    }()

    private lazy var cameraImageView: UIImageView = {
        let imageView = UIImageView(frame: .zero)
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .center
        imageView.clipsToBounds = true
        imageView.image = Constants.cameraImage
        imageView.backgroundColor = .surface8Color.withAlphaComponent(Constants.cameraImageViewAlpha)
        imageView.isUserInteractionEnabled = true

        return imageView
    }()
}

// MARK: - Private

private extension CameraCell {
    enum Constants {
        static let cameraImageViewAlpha = 0.4 as CGFloat
        static let cameraImage = UIImage(named: "photo-camera")
        static let cameraViewTransform = CGAffineTransform(scaleX: 2.0, y: 2.0)
    }

    func setupView() {
        setupCameraContainerView()
    }

    func setupCameraContainerView() {
        addSubview(cameraContainerView)

        addConstraints([
            cameraContainerView.leadingAnchor.constraint(equalTo: leadingAnchor),
            cameraContainerView.trailingAnchor.constraint(equalTo: trailingAnchor),
            cameraContainerView.topAnchor.constraint(equalTo: topAnchor),
            cameraContainerView.bottomAnchor.constraint(equalTo: bottomAnchor)
        ])

        setupCameraView()
        setupCameraImageView()
    }

    func setupCameraView() {
        cameraContainerView.addSubview(cameraView)

        addConstraints([
            cameraView.leadingAnchor.constraint(equalTo: cameraContainerView.leadingAnchor),
            cameraView.trailingAnchor.constraint(equalTo: cameraContainerView.trailingAnchor),
            cameraView.topAnchor.constraint(equalTo: cameraContainerView.topAnchor),
            cameraView.bottomAnchor.constraint(equalTo: cameraContainerView.bottomAnchor)
        ])
    }

    func setupCameraImageView() {
        cameraContainerView.addSubview(cameraImageView)

        addConstraints([
            cameraImageView.leadingAnchor.constraint(equalTo: cameraContainerView.leadingAnchor),
            cameraImageView.trailingAnchor.constraint(equalTo: cameraContainerView.trailingAnchor),
            cameraImageView.topAnchor.constraint(equalTo: cameraContainerView.topAnchor),
            cameraImageView.bottomAnchor.constraint(equalTo: cameraContainerView.bottomAnchor)
        ])
    }
}

// MARK: - UIImagePickerControllerDelegate

extension CameraCell: UIImagePickerControllerDelegate {}

// MARK: - UINavigationControllerDelegate

extension CameraCell: UINavigationControllerDelegate {}

我对此警告也有类似的问题。

2023-04-23 18:06:11.709709+0530 [19161:1003234] [Camera] Attempted to change to mode Portrait with an unsupported device (BackDual). Auto device for both positions unsupported, returning Auto device for same position anyway (BackAuto).
2023-04-23 18:06:12.445469+0530 [19161:1003512] XPC connection interrupted
2023-04-23 18:06:12.449248+0530 [19161:1003818] [Common] [SBSSystemServiceClient:0x2807805a0] Service suspended: the connection with the service host has been interrupted.
2023-04-23 18:06:12.449309+0530 [19161:1003752] [Common] [FBSOrientationObserverClient:0x2807a7180] Service suspended: the connection with the service host has been interrupted.
2023-04-23 18:06:13.190247+0530 [19161:1003524] [Common] [FBSOrientationObserverClient:0x2807a7180] Service suspended: the connection with the service host has been interrupted.
2023-04-23 18:06:13.190388+0530 [19161:1003524] [Common] [SBSSystemServiceClient:0x2807805a0] Service suspended: the connection with the service host has been interrupted.
2023-04-23 18:06:23.256350+0530 [19161:1003525] [connection] nw_connection_copy_connected_local_endpoint_block_invoke [C11] Client called nw_connection_copy_connected_local_endpoint on unconnected nw_connection
2023-04-23 18:06:23.256474+0530 [19161:1003525] [connection] nw_connection_copy_connected_remote_endpoint_block_invoke [C11] Client called nw_connection_copy_connected_remote_endpoint on unconnected nw_connection
2023-04-23 18:06:23.256551+0530 [19161:1003525] [connection] nw_connection_copy_protocol_metadata_internal_block_invoke [C11] Client called nw_connection_copy_protocol_metadata_internal on unconnected nw_connection

但是这个解决方案对我有用Info.plist 包含不需要的或额外的键。 就我而言,我有这个额外的钥匙,删除该键一切都充满魅力! :)

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

修复警告:[相机]尝试使用不支持的设备更改为肖像模式(BackDual) 的相关文章

随机推荐

  • Google Play 游戏服务登录按钮出现“未知错误”

    我正在尝试在我的练习 Android 应用程序中使用 Google Play 游戏服务 我按照开发人员指南中的说明获得了登录按钮 UI 当我第一次登录时 它会引导我完成登录过程 就在该过程即将完成后 它给我一个带有 未知错误 的对话框 第一
  • 如何分析简单的英语句子

    是否有任何库可用于分析 nlp 简单的英文文本 比如如果能做到这一点那就完美了 输入 我要去 输出 I go 现在进行时 怎么样自然语言工具包 http www nltk org
  • Git 在写入对象时挂起

    我试图git push u origin master它只是挂在 Writing objects 99 219 220 12 65 MiB 97 KiB s The 12 65部分左右移动 当我退出该进程并再次运行它时 它恢复到 99 但从
  • 为什么我不能使用 string.Empty 作为可选参数而不是空引号? [复制]

    这个问题在这里已经有答案了 我正在完善我的代码 并注意到在某些地方我有可选参数 默认值为空字符串 我将其更改为空字符串类的默认值 你猜怎么着 显然空引号和空引号之间有区别string Empty 什么鸭子 有意拼写错误 private vo
  • struct addrinfo 和 struct sockaddr 有什么区别

    据我了解 struct addrinfo 用于准备套接字地址结构 struct sockaddr 包含套接字地址信息 但这实际上意味着什么呢 struct addrinfo 包含一个指向 struct sockaddr 的指针 为什么要把它
  • 匹配邮件中自然文本的算法

    在进一步处理之前 我需要将电子邮件中自然 连贯的文本 句子与列表 签名 问候语等分开 example Hi tom 上周一我们做了 bla bla lore Lorem ipsum dolor sat amet consectetur ad
  • 如何从 LinkedIn 解析 Mash 以创建 Ruby 对象

    我使用 pengwynn 的 LinkedIn gem 从 LinkedIn 获得身份验证 一切正常 我在回调中得到了一个 Mash 如下所示
  • 如何开发自己的 Java 库? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您可以建议我开发自己的 Java 库吗 有什么好的教程 起点吗 我现在正在考虑开发一个小型图形库 如何开发自己的 Java 库 您可能
  • Viewbag检查item是否存在并写出html和值错误

    我正在使用 razor 语法 我想在输出 html 之前检查是否设置了某些 ViewBag 值 如果设置了一个值 那么我想把它写出来 如果不是 我希望它什么也不做 if ViewBag UserExists null Response Wr
  • 将基本 Tensorflow 模型导出到 Google Cloud ML

    我正在尝试导出本地张量流模型以在 Google Cloud ML 上使用它并对其运行预测 我正在关注使用 mnist 数据提供 Tensorflow 示例 https github com tensorflow serving blob m
  • vi 中删除重复行?

    我有一个文本文件 其中包含一长串条目 每行一个 其中一些是重复的 我想知道是否可以 如果可以 如何 删除任何重复项 如果可能的话 我有兴趣在 vi vim 中执行此操作 如果您可以对文件进行排序 则可以使用 sort u
  • 在自己的网站上提交之前检查是否有人喜欢页面

    我的服务器上有一个自己的页面 人们可以在其中下载我自己的曲目 我的想法是在该页面上添加一个类似于我的 Facebook 页面的按钮 人们必须首先点击 喜欢 按钮 然后才能下载曲目 也许这必须通过包含姓名 电子邮件和他们必须单击的类似按钮的表
  • C:从函数返回字符串

    我有一个返回字符串的函数 const char getMyPassword return mysecretpassword 嗯 它工作得很好 但我发现如果我在 Unix 系统上运行 strings 它会显示在列表中 不好 更换它最简单的方法
  • 舵柄:找不到舵柄

    我收到此错误消息 helm version Error could not find tiller 我已经创建了tiller项目 oc new project tiller Now using project tiller on serve
  • 反应式扩展 SelectMany 和 Concat

    我理解 SelectMany 的行为是有效地将生成的每个值的结果合并到单个流中 因此排序是不确定的 如何在 C 中的 RxJs 中执行类似于 concatAll 的操作 var obs Observable Range 1 10 Selec
  • 您可以将一名工会成员的值分配给另一名工会成员吗?

    考虑以下代码片段 union int a float b a b a is this UB b b something 将一名工会成员分配给另一名工会成员是否有效 不幸的是 我相信这个问题的答案是 尽管自赋值完全没问题 但 C 中对联合的操
  • jQuery 简单加载第一次调用花费太多时间

    我的简单 jQuery 的加载语句花费了太多时间 50 秒以上 不存在服务器端问题 服务器的页面逻辑也很简单 我也尝试过 ajax get甚至尝试使用手动 AJAX 调用 XMLHttp请求 以下是 jQuery 加载的示例 functio
  • 如何让 PyDev 编辑器有选择地忽略错误?

    我在 Eclipse 下使用 PyDev 编写一些 Jython 代码 我有很多情况需要做这样的事情 import com work project component client Interface ISubInterface as I
  • 制作自定义tabBar的方法

    创建这样的效果以及导航控制器和视图控制器的处理的最佳方法应该是什么 如果我不想在 viewcontorller 中重新调整每个后续视图的大小并且事情看起来就像是一个 该怎么办标签栏 我建议使用 UIImageView 作为蓝色背景 然后使用
  • 修复警告:[相机]尝试使用不支持的设备更改为肖像模式(BackDual)

    我有一个UICollectionView with a CameraCell作为第一个单元格 它显示相机预览 我想修复 XCode 控制台中的警告iOS 16 iPhone XS Max配备双后置摄像头 Camera Attempted t