Objective-C开发中如何可靠选取iPhone 13 Pro系列的微距摄像头?
解答
枚举不存在的原因
苹果并未在AVCaptureDeviceType枚举中新增独立的微距摄像头类型,也不存在文档遗漏。iPhone 13 Pro/Pro Max系列的微距拍摄能力,是由后置超广角摄像头的近距离对焦硬件+系统算法共同实现的,不属于独立的硬件摄像头分类,因此没有对应的枚举值。
你之前硬编码ID获取的设备,本质就是后置超广角摄像头,不同机型、不同系统版本的设备ID编号规则可能变化,硬编码确实存在稳定性风险。
可靠实现方案
该方案仅支持iOS 15.0及以上系统版本,更低系统版本无官方微距能力支持,实现步骤如下:
- 用
AVCaptureDeviceTypeBuiltInUltraWideCamera类型筛选后置超广角摄像头 - 校验设备的
isMacroModeSupported属性,确认其支持微距模式 - 根据业务需求配置微距模式的开关状态
代码示例
获取支持微距的超广角设备
if (@available(iOS 15.0, *)) { AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ AVCaptureDeviceTypeBuiltInUltraWideCamera ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; for (AVCaptureDevice *device in discoverySession.devices) { if (device.isMacroModeSupported) { _captureDevice = device; break; } } }
配置微距模式
NSError *configError = nil; if ([_captureDevice lockForConfiguration:&configError]) { if (_captureDevice.isMacroModeSupported) { // 强制开启微距 _captureDevice.macroMode = AVCaptureMacroModeOn; // 如需系统根据拍摄距离自动切换微距,可设为AVCaptureMacroModeAuto } [_captureDevice unlockForConfiguration]; }
内容的提问来源于stack exchange,提问作者cguenther
相关产品推荐
相关产品推荐

