You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS17中AVCaptureVideoOrientation弃用警告的代码修改咨询

解决iOS17中AVCaptureVideoOrientation弃用警告的方案

iOS17后AVCaptureVideoOrientation被官方弃用,需改用AVCaptureDeviceRotationCoordinator来管理相机连接的方向匹配。以下是针对你提供的代码的修改方案:

核心修改思路

  • 移除AVCaptureVideoOrientation的直接使用,通过AVCaptureDeviceRotationCoordinator获取当前设备对应的旋转值
  • 为兼容iOS16及以下系统,添加版本判断逻辑

修改后的代码片段

/// - Tag: CapturePhoto
public func capturePhoto() {
    if self.setupResult != .configurationFailed {
        self.isCameraButtonDisabled = true
        
        sessionQueue.async {
            if let photoOutputConnection = self.photoOutput.connection(with: .video) {
                if #available(iOS 17.0, *) {
                    // iOS17及以上使用AVCaptureDeviceRotationCoordinator
                    let rotationCoordinator = self.session.deviceRotationCoordinator
                    // 以竖屏为例,获取对应的设备旋转值
                    let targetRotation = rotationCoordinator.targetRotation(for: .portrait)
                    photoOutputConnection.rotation = targetRotation
                } else {
                    // iOS16及以下保留原逻辑
                    let videoPreviewLayerOrientation: AVCaptureVideoOrientation = .portrait
                    photoOutputConnection.videoOrientation = videoPreviewLayerOrientation
                }
            }
            var photoSettings = AVCapturePhotoSettings()
            // 后续原有代码...
        }
    }
}

关键说明

  • AVCaptureDeviceRotationCoordinator通过session.deviceRotationCoordinator获取,它会自动处理设备物理旋转与相机输出的匹配
  • targetRotation(for:)方法传入你期望的界面方向(比如.portrait),会返回对应的相机连接旋转值
  • 版本判断确保代码在iOS17以下设备仍能正常运行

内容的提问来源于stack exchange,提问作者Tracy9988 Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:05:56