2015-10-22 1 views
1

Je suis en train de régler le niveau de zoom d'une caméra par ce code:AVCaptureDevice videoZoomFactor toujours hors de portée

AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 


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

Ce code ne fonctionne pas dans ios 7 (cela fonctionne dans ios 9), il provoque toujours une exception:

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

Je ne peux pas trouver des informations, mais la plage de zoom ios 7 semble être « de 1 sur 2 ». Mais chaque valeur que j'ai essayé de définir pour le float newzoom cause l'exception ... Comment puis-je faire pour définir le videoZoomFactor dans Ios 7?

EDIT

j'ai décidé de cacher le bouton de zoom lorsque l'appareil ne supporte pas le zoom. Donc, c'est le code que je l'ai utilisé:

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]; 
} 

Si max et min sont égaux à 1 signifie que l'appareil ne prend pas en charge ce type de zoom. Cela semble fonctionner ... Il y a une meilleure façon de faire ce contrôle? Je ne trouve pas une liste des périphériques pris en charge dans la documentation ...

Répondre

2

Selon la documentation de pomme, si est 1, le videoMaxZoomFactor de l'appareil puis zoom n'est pas disponible:

Si la propriété videoZoomFactor du dispositif est attribué une valeur plus grande, un NSRangeException sera jeté. Un facteur de zoom maximum de 1 indique pas de zoom est disponible.

Donc, dans votre cas, vous pouvez cacher la zoomButton simplement en cochant cette propriété:

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

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

Vous devez vérifier videoMaxZoomFactor avant de définir videoZoomFactor car videoZoomFactor n'est PAS toujours "de 1.0 à 2.0". Docs:

Cette valeur est un multiplicateur. Par exemple, une valeur de 2,0 double la taille du sujet d'une image (et réduit de moitié le champ de vision). admis valeurs sont comprises entre 1,0 (champ de vision) à la valeur de la propriété videoMaxZoomFactor de la forme active. La définition de la valeur de cette propriété passe immédiatement au nouveau facteur de zoom. Pour une transition en douceur , utilisez la méthode rampToVideoZoomFactor:withRate:.

+0

j'ai modifié ma question, d'abord mon problème est un problème matériel d'incompatibilité – user31929