AVCaptureDevice videoZoomFactor总是超出范围

时间:2015-10-22 07:59:18

标签: ios ios7 avfoundation avcapturedevice

我正在尝试通过以下代码设置相机的缩放级别:

 AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];


 if ([videoDevice lockForConfiguration:nil]) {
     float newzoom=1.3;
     videoDevice.videoZoomFactor = newzoom;
     [videoDevice unlockForConfiguration];
 }

此代码在ios 7中不起作用(它适用于ios 9),它始终是一个异常:

Terminating app due to uncaught exception 'NSRangeException', reason: 'videoZoomFactor out of range'

我无法找到信息,但ios 7中的变焦范围似乎是“从1到2”。但是我试图为float newzoom设置的每个值都会导致异常......我怎样才能在Ios 7中设置videoZoomFactor?

修改

我决定在设备不支持缩放时隐藏缩放按钮。所以这是我用过的代码:

AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
float max=videoDevice.activeFormat.videoMaxZoomFactor;
float min=MIN(videoDevice.activeFormat.videoMaxZoomFactor, 4.0f);


if (max==1 && min==1) {

    [ZoomButton setHidden:YES];
}

如果max和min等于1表示设备不支持这种缩放。它似乎有效...有一个更好的方法来做这个检查?我在文档中找不到支持的设备列表......

2 个答案:

答案 0 :(得分:3)

根据Apple文档,如果设备的videoMaxZoomFactor为1,则缩放功能不可用:

  

如果为设备的videoZoomFactor属性分配了更大的值,   将抛出NSRangeException。 最大缩放系数为1   表示没有缩放功能

因此,在您的情况下,您可以通过仅检查此属性来隐藏zoomButton:

AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
float max=videoDevice.activeFormat.videoMaxZoomFactor;

if (max==1) {
    [ZoomButton setHidden:YES];
}

答案 1 :(得分:0)

在设置videoMaxZoomFactor之前,您应该检查videoZoomFactor,因为videoZoomFactor并非总是“从1.0到2.0”。 文档:

  

此值是乘数。例如,值为2.0的两倍   图像主体的大小(并将视野减半)。 <强>允许   值的范围从1.0(完整视野)到活动的值   格式的videoMaxZoomFactor属性。设置此值   属性立即跳转到新的缩放系数。为了顺利   过渡,使用rampToVideoZoomFactor:withRate:方法。