实现焦距调节

声明两个属性,遵循手势的协议<UIGestureRecognizerDelegate>

      /***  记录开始的缩放比例*/@property(nonatomic,assign)CGFloat beginGestureScale;/*** 最后的缩放比例*/@property(nonatomic,assign)CGFloat effectiveScale;

这两个属性分别用于记录缩放的比例。相机支持的焦距是1.0~67.5,所以再控制器加载的时候分别给这两个属性附上一个初值 1.0。

之后给view添加一个缩放手势,手势调用的方法如下

//缩放手势 用于调整焦距
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer{BOOL allTouchesAreOnThePreviewLayer = YES;NSUInteger numTouches = [recognizer numberOfTouches], i;for ( i = 0; i < numTouches; ++i ) {CGPoint location = [recognizer locationOfTouch:i inView:self.backView];CGPoint convertedLocation = [self.previewLayer convertPoint:location fromLayer:self.previewLayer.superlayer];if ( ! [self.previewLayer containsPoint:convertedLocation] ) {allTouchesAreOnThePreviewLayer = NO;break;}
}if ( allTouchesAreOnThePreviewLayer ) {self.effectiveScale = self.beginGestureScale * recognizer.scale;if (self.effectiveScale < 1.0){self.effectiveScale = 1.0;}NSLog(@"%f-------------->%f------------recognizerScale%f",self.effectiveScale,self.beginGestureScale,recognizer.scale);CGFloat maxScaleAndCropFactor = [[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] videoMaxScaleAndCropFactor];NSLog(@"%f",maxScaleAndCropFactor);if (self.effectiveScale > maxScaleAndCropFactor)self.effectiveScale = maxScaleAndCropFactor;[CATransaction begin];[CATransaction setAnimationDuration:.025];[self.previewLayer setAffineTransform:CGAffineTransformMakeScale(self.effectiveScale, self.effectiveScale)];[CATransaction commit];}}

然后在实现手势的代理方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{if ( [gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] ) {self.beginGestureScale = self.effectiveScale;}return YES;
}

在每次手势开始的时候把上一次实际缩放值赋给初始缩放值,如果不这么做的话你会发现每次手势开始的时候界面都会跳来跳去的。一个简单功能的相机基本上完成了,最后一步就是之前我们在拍照的方法里写死了一个1.0,我们还需要修改一下它,,否则虽然你看到的界面焦距改变了,但是实际拍出来的照片是没有变化的。找到拍照方法里的

[stillImageConnection setVideoScaleAndCropFactor:1.0];

修改为

[stillImageConnection setVideoScaleAndCropFactor:self.effectiveScale];

更多内容请看我的高仿微信的拍照录制视频博客

iOS实现拍照的焦距调节相关推荐

  1. iOS设置拍照retake和use按钮为中文简体

    iOS设置拍照retake和use按钮为中文简体,设置有两种方式一个是代码直接控制,第二就是xcode配置本机国际化为"china"(简体中文). 本文重点要说的是第二种,这样配置 ...

  2. input调起ios摄像头拍照旋转问题解决思路

    背景 input标签调起ios原生摄像头拍照时,上传照片发现照片向左旋转了90度 旋转的原因: 手机拍照会给图片添加一个Orientaion信息(即拍照方向),如下: 用ios手机拍照,系统会给图片加 ...

  3. iOS 相机拍照声音消失方法

    iOS 相机拍照声音消失方法 通过在拍照的时候播放一个同拍照音频文件的一个反向音频,是两个音频的声波中和,从而达到无声具体如下: static SystemSoundID soundID = 0; i ...

  4. 解决ios横屏拍照图片自动旋转90度问题

    解决ios横屏拍照图片自动旋转90度问题 参考文章: (1)解决ios横屏拍照图片自动旋转90度问题 (2)https://www.cnblogs.com/lanshengzhong/p/900856 ...

  5. ios 自定义拍照页面_无需解锁也能使用的iOS实用小组件

    侧滑惊喜 无需解锁也能使用的iOS小组件 iOS锁定后还可以使用很多小功能,今天我们就分享一下侧滑显示的小组件 Dragonstar·2020  侧滑 显示小组件  我们一直希望苹果能够将小组件直接添 ...

  6. ios 自定义拍照页面_vivo X27只靠颜值和拍照吃饭?体验过后你也会被系统所折服...

    说到vivo X27,相信很多小伙伴都会第一时间想到其帅气的颜值以及强悍的拍照!的确,就颜值来说,vivo X27凭借着升降式摄像头.零界全面屏.不凸出的后置三摄以及孔雀纹理的确称的上是2019年的最 ...

  7. ios 通过代码调整焦距

    我们在自定义相机时,若要实现镜头变焦,也就是推近或者拉远焦距,iOS 7以后的实现:可以通过修改AVCaptureDevice的 方法rampToVideoZoomFactor withRate 来实 ...

  8. ios 自定义拍照页面_iOS开发笔记:自定义相机拍照

    目录 之前用AVFoundation自定义相机做了拍照与视频相关的东西,为什么要自定义呢?主要是提供更个性化的交互设计,符合app主题,对于视频来说,也便于提供更多丰富有趣的功能.前段时间整理了下拍照 ...

  9. iOS 相机拍照、相册获取照片(仿微信) 一一 拍照、图片裁剪

    最近项目做到用户自定义头像功能模块,然后仿照微信做了一个.从相册获取照片的链接在这:http://blog.csdn.net/a44496913/article/details/72979704 先来 ...

最新文章

  1. 图灵奖获得者Yann LeCun:未来几十年AI研究的最大挑战是「预测世界模型」
  2. Android中windowTranslucentStatus与windowTranslucentNavigation的一些设置(转)
  3. java修改动态视频,直播视频app源码,动态修改cron
  4. 高效地加载图片(一) 高效地加载大图
  5. 艾瑞发布2018视频云行业报告,网易云信领跑第一阵营
  6. No report created. Execute hbck_chore_run in hbase shell to generate a new sub-report.
  7. bzoj#3456. 城市规划
  8. vue2.0实现点击后显示,再次点击隐藏
  9. HDFS的架构和设计要点
  10. IBM AIX存储层结构及操作命令实现
  11. 20139216网络攻防技术第七次作业
  12. 思维导图有什么用?思维导图的优势、缺点及其适用人群详解
  13. 微信开通状态检测工具
  14. 音频文件格式解析与编解码
  15. 拨号服务器可以端口映射吗,常见的几种ADSL 路由器端口映射设置方法
  16. ubuntu SSH 链接服务器加代理
  17. python关系图谱_利用Python+Gephi构建LOL全英雄间的关联图谱
  18. Python 获取中文字拼音首个字母
  19. mac 中 caps lock和control键交换,以及alt键替换option方法
  20. Python爬虫:让“蜘蛛”帮我们工作

热门文章

  1. FVWM安装及配置方法
  2. 2023河北工程大学计算机考研信息汇总
  3. CAN信号转以太网究竟怎么回事?TCP转CAN又是什么?
  4. 智能车学习(六)——OLED屏幕使用
  5. Qt 之 简单截图功能(一)实现鼠标选中区域截图
  6. 脚本实现自动抢红包(仅供学习交流)
  7. java nullable注解_【Java】idea @NotNull @Nullable 注解
  8. behave java_Behave + Selenium(Python) 三
  9. NSTimeInterval的使用
  10. 全渠道后端 : RFID在仓储物流中的运用