Objective-C CameraView初始缩放设置:默认开启2倍变焦方法问询
解决Objective-C相机初始2倍变焦的问题
要设置相机默认开启2倍变焦,只需在初始化相机的setupBackCamera方法中,锁定相机配置后直接设置videoZoomFactor属性即可,同时要保证设置的变焦值不超过设备支持的最大倍数。
修改后的setupBackCamera代码:
@property (nonatomic) AVCaptureDevice *camDevice; @property (nonatomic) CGFloat zoomBegin; @property (nonatomic) CGFloat zoomMax; - (void)setupBackCamera { self.captureSession = [AVCaptureSession new]; self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto; AVCaptureDevice *backCamera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if (!backCamera) { NSLog(@"Unable to access back camera!"); return; } NSError *error; // 管理相机缩放相关配置 if(YES == [backCamera lockForConfiguration:&error]) { _zoomMax = backCamera.activeFormat.videoMaxZoomFactor; // 设置初始变焦为2倍,同时不超过设备最大变焦倍数 CGFloat initialZoom = MIN(2.0, _zoomMax); backCamera.videoZoomFactor = initialZoom; [backCamera unlockForConfiguration]; } _camDevice = backCamera; [_previewView addGestureRecognizer: [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchToZoom:)]]; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:backCamera error:&error]; // 后续原有代码... }
关键说明:
- 必须调用
lockForConfiguration:获取相机配置的修改权限,修改完成后调用unlockForConfiguration释放权限,否则直接修改videoZoomFactor会报错。 - 使用
MIN(2.0, _zoomMax)确保初始变焦不会超过设备支持的最大倍数(不同设备的videoMaxZoomFactor不同,比如iPhone 6s是4倍,新款机型更高)。 - 你的
pinchToZoom:方法已经正确操作了相机的原生变焦属性,初始设置后,用户捏合变焦会基于这个初始值继续调整,无需额外修改捏合逻辑。
另外注意:你的代码中存在两个捏合手势处理方法pinchDetected:和pinchToZoom:,其中pinchDetected:是操作预览层的transform缩放,这和pinchToZoom:操作相机原生变焦是两种不同的缩放方式,建议只保留一种,避免冲突。如果要使用相机原生变焦(画质更好),可以移除pinchDetected:相关代码和手势。
内容的提问来源于stack exchange,提问作者Jesper Martensson
相关产品推荐
相关产品推荐

