苹果手机部分机型支持微距拍摄,这些机型使用超广角镜头可以清晰的拍摄最近距离2厘米的微距照片和视频。目前支持微距拍照的机型包括iPhone 13 Pro、iPhone 13 Pro Max、iPhone 14 Pro和iPhone 14 Pro Max、iPhone 15 Pro和iPhone 15 Pro Max。
相应的使用自定义相机的 APP 要实现微距拍摄的功能,就需要首先搜索到支持微距的摄像设备,才能获取到微距拍摄的能力。
简而言之,搜索设备顺序可设为:
@[AVCaptureDeviceTypeBuiltInTripleCamera,AVCaptureDeviceTypeBuiltInDualWideCamera,AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInDualCamera];
详细代码如下:
- (AVCaptureDevice *)getCameraDeviceWithPosition:(AVCaptureDevicePosition )position {
NSArray<AVCaptureDeviceType> *deviceTypes = @[AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInDualCamera];//设备类型:广角镜头、双镜头
if (@available(iOS 13.0, *)) {
// 数组成员的顺序,决定搜索设备的顺序,不要随意调整。
deviceTypes = @[AVCaptureDeviceTypeBuiltInTripleCamera,AVCaptureDeviceTypeBuiltInDualWideCamera,AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInDualCamera];
}
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes mediaType:AVMediaTypeVideo position:position];
for (AVCaptureDevice *camera in session.devices) {
if ([camera position] == position) {
return camera;
}
}
return nil;
}
修改默认焦距
支持微距的设备,默认的焦距是 0.5x,画面囊括的内容较多。期望将焦距改成 1x,与微信保持一致。修改方法如下:
AVCaptureDevice *device = [self getCameraDeviceWithPosition:position];
self.videoInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
if (@available(iOS 13.0, *)) {
NSArray *factors = [self.videoInput.device virtualDeviceSwitchOverVideoZoomFactors];
if (factors.count) {
[self.videoInput.device lockForConfiguration:nil];
[self.videoInput.device setVideoZoomFactor:2];
[self.videoInput.device unlockForConfiguration];
}
}