我正在尝试通过以下代码设置相机的缩放级别:
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表示设备不支持这种缩放。它似乎有效...有一个更好的方法来做这个检查?我在文档中找不到支持的设备列表......
答案 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:
方法。