关于怎么写自定义相机,我在这里就不多描述了,一搜一大把.
这篇文章只谈如何实现手势调整焦距: 一开始呢,我使用缩放手势来做调焦,遇到很多问题不说, 还一直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
其实网上很多用滑块做变焦的, 但是项目不允许使用滑块, 所以想了个折中的办法.