iOS实现拍照的焦距调节

news/2024/12/1 0:35:57/

实现焦距调节

声明两个属性,遵循手势的协议<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];


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


http://www.ppmy.cn/news/440916.html

相关文章

新版webkit内核iphonex竖屏拍照旋转90修复导致exifjs使用问题

前言 在我们的 H5 页面中,有人脸上传的功能, 在旧版的 iphone 上, 竖屏拍照之后照片自动旋转 90, 因此前端使用了exif.js来根据照片的 orientation 信息来判断照片是否需要旋转. 但最近出现用户使用 iphoneX 拍照之后相片出现了横屏的情况 探索 一开始以为是 orientation 的…

iOS 相机拍照与图库

首先要采用三个协议&#xff0c;分别是 UINavigationControllerDelegate , UIImagePickerControllerDelegate , UIActionSheetDelegate -(IBAction)photoClick:(id)sender {UIActionSheet *actionSheet [[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonT…

经常用苹果手机拍照!不学会这4个功能,怪不得拍不出好照片

苹果手机不仅系统非常流畅耐用&#xff0c;相机也会是十分给力&#xff0c;使用它就能轻松拍出好照片。 不信&#xff1f;只要学会苹果相机中的这4个功能&#xff0c;随手一拍就是非常好的照片哦。 下面就来一起看看吧&#xff01; 1.全景模式 相信这个模式大家使用的比较少&a…

ios照片获取、拍照功能

// // HYBPhotoPickerManager.h // ehui // // Created by 黄仪标 on 14/11/26. // Copyright (c) 2014年 黄仪标. All rights reserved. //#import <Foundation/Foundation.h>/*!* brief 照片获取或者拍照功能管理器* author huangyibiao*/ interface HYBPhotoPicke…

VFC芯片结构及其工作原理

&#xff08;二&#xff09; VFC芯片结构及其工作原理 1&#xff0e;VFC芯片 AD654的结构 AD654芯片是一个单片VFC变换芯片&#xff0c;中心频率为250kHZ。它是由阻抗变换器A、压控振荡器和一个驱动输出级回路构成&#xff0c;其内部结构见图1&#xff0d;15&#xff08;a入压…

iPhone 11 Pro 的拍照好在哪?这是专业摄影师给出的答案

来源 | AppSo&#xff08;ID&#xff1a;AppSo&#xff09; 作者 | 肖钦鹏 相机&#xff0c;无疑是新一代 iPhone 的最大卖点&#xff0c;在之前的 iPhone 11 和 iPhone 11 Pro 评测中&#xff0c;我曾这样评价&#xff1a; 我们以前常说&#xff0c;iPhone 是用做电脑的思路做…

iPhone语音拍照怎么用?

要如何实现iPhone声控拍照&#xff08;iOS语音拍照&#xff09;&#xff1f;在出去游玩时&#xff0c;想要一张美美的照片还要找人帮忙&#xff0c;其实iPhone语音拍照完全可以解决你的烦恼。iOS隐藏技巧&#xff0c;轻松实现iPhone声控拍照功能和Apple Watch无线控制iPhone相机…

ios 拍照与摄像

ios 拍照与摄像 (2012-11-23 14:38:40) 该类继承自UINavigationController类 步骤&#xff1a; 检查媒体来源模式是否可用 检查该来源模式下所支持的媒体类型 创建图像选取控制器&#xff0c;设置其属性并显示 在委托协议方法中处理 1.检查媒体来源 调用UIImagePickerControl…