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

iPhone 13 Pro用Swift+AVFoundation开发如何开启builtInTripleCamera自动切换

问题解决

你已经正确选择了.builtInTripleCamera虚拟三摄设备作为采集源,这个虚拟设备本身就封装了自动切换物理摄像头的能力,你缺少的是自动切换功能的启用配置,修正步骤如下:

  • 核心配置项为isAutoSwitchingDeviceEnabled,在设备支持该特性的前提下开启即可触发原生的自动切换逻辑:微距自动切超广角、中距离切广角、远景切长焦
  • 可选配置:如果需要感知摄像头切换事件,可以对AVCaptureDevice的selectedDevice属性添加KVO监听,切换时会收到回调
  • 注意事项:不要给虚拟三摄设备设置固定的、超出自动切换阈值的缩放倍率,否则会打断自动切换逻辑

修正后代码示例

// 发现会话直接指定后置位置,省去后续遍历判断
let session = AVCaptureDevice.DiscoverySession(
    deviceTypes: [.builtInTripleCamera],
    mediaType: .video,
    position: .back
)

guard let rearTripleCamera = session.devices.first else {
    // 此处可添加设备不支持三摄时的降级逻辑,比如 fallback 到广角单摄
    return
}
self.rearCamera = rearTripleCamera

do {
    try rearCamera.lockForConfiguration()
    // 首先判断设备是否支持自动切换,再开启配置
    if rearCamera.isAutoSwitchingDeviceSupported {
        rearCamera.isAutoSwitchingDeviceEnabled = true
    }
    rearCamera.exposureMode = .continuousAutoExposure
    rearCamera.focusMode = .continuousAutoFocus
    rearCamera.unlockForConfiguration()
} catch {
    print("摄像头配置失败:\(error.localizedDescription)")
}

额外说明

如果你的应用需要支持手动固定使用某一个物理摄像头,不要在虚拟三摄设备上修改配置,直接单独选择.builtInUltraWideCamera(超广角)、.builtInWideAngleCamera(广角)、.builtInTelephotoCamera(长焦)对应的单摄设备作为采集源即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:36:06