AVCaptureDevice 调整焦距

关于怎么写自定义相机,我在这里就不多描述了,一搜一大把.

这篇文章只谈如何实现手势调整焦距:  一开始呢,我使用缩放手势来做调焦,遇到很多问题不说, 还一直crash. 所以我想到了在用缩放手势的基础上不变 , 只是在调整焦距的时候设置好区间 maxValue 和minValue 限制好这两个值就不再发生crash的情况了, 而且调整焦距还很顺畅.

想要实现调整焦距 需先设置AVCaptureVideoPreviewLayer的videoGravity为AVLayerVideoGravityResizeAspectFill.

创建 _videoConnection= [ _Output connectionWithMediaType:AVMediaTypeVideo];

贴上关键代码:

- (void)pinch:(UIPinchGestureRecognizer*)pinch{

if( pinch.state==UIGestureRecognizerStateChanged) {

 pinch.view.transform=CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);

 value= (pinch.view.frame.size.width - KBOUNDS.width) / (KBOUNDS.width*2);

if(pinch.view.frame.size.width < KBOUNDS.width

     self.slider.value=0;

}

[self updataUI];

pinch.scale=1;

}

}

[self.previewLayer setAffineTransform:CGAffineTransformMakeScale(1 +value , 1 + value)]; 

_videoConnection.videoScaleAndCropFactor= 1 + value;

限制minValue - maxValue = 0-1

其实网上很多用滑块做变焦的, 但是项目不允许使用滑块, 所以想了个折中的办法.

你可能感兴趣的:(AVCaptureDevice 调整焦距)