2015-10-22 16 views
1

的我想這段代碼來設置相機的變焦水平:AVCaptureDevice videoZoomFactor總是超出範圍

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」。但是我試圖爲浮點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

根據蘋果的文檔,如果設備的videoMaxZoomFactor爲1,則變焦無法使用:

如果設備的videoZoomFactor屬性分配一個較大的值, 的NSRangeException將被拋出。 最大變焦倍數爲1 表示沒有變焦杆可用

所以你的情況,你可以通過只檢查此屬性隱藏zoomButton:

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

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

因爲videoZoomFactor並不總是「從1.0到2.0」,所以在設置videoZoomFactor之前應檢查videoMaxZoomFactor。 Docs:

此值是一個乘數。例如,值爲2.0會使圖像主題的大小加倍(並將視野減半)。 允許的 值範圍從1.0(全視場)到活動的 格式的值videoMaxZoomFactor屬性。設置此 屬性的值立即跳轉到新的縮放係數。要順利進行 轉換,請使用rampToVideoZoomFactor:withRate:方法。

+0

我已經編輯我的問題,首先我的問題是不兼容的硬件問題 – user31929