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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,532评论 1 14
  • VLC的集成和使用 VLC介绍 VLC Media Player (VideoLAN) 为 Windows、Lin...
    Pocket阅读 19,830评论 75 66
  • 转自:http://www.code4app.com/blog-866962-1317.html1、设置UILab...
    MMOTE阅读 1,663评论 1 1
  • 雷蒙德卡福 当我们讨论爱情时我们讨论什么 大教堂 米兰昆德拉 不能承受的生命之轻 尼采 查拉如斯特拉如是说 梭罗 ...
    一1阅读 193评论 0 1
  • 记得三年前第一次来苏州正值桂花盛开,阳光下朵朵桂花争奇斗艳开得好生热闹,蜜蜂在上面辛勤地采蜜。微风吹来顿时整个空气...
    东语西言阅读 338评论 0 1