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
相关产品推荐
相关产品推荐

