代码库> 手势交互> 仿淘宝捏合手势和拖拽手势调整相机镜头焦距
仿淘宝捏合手势和拖拽手势调整相机镜头焦距
关注
上传者:8430110 分类:手势交互(Gesture)
查看次数:725 下载次数:43
上传时间:2019-04-02 大小:3 KB
最新代码请移步github:

https://github.com/shabake/GHGestureDemo

捏合手势和拖拽手势并存,实现调整焦距



**如果运行崩溃请添加`Privacy - Camera Usage Description`**


自定义一个`view`命名为`GHAdjustFocal`,
里面包含五个部分分别是
`backGround`背景 `circle`圆圈 `slider `滑杆 `add `加号 `sub`减号

里面可以通过属性`circleCenterY`设置圆圈的位置
还有两个分别是获取圆圈的当前的`centerY`和滑杆的总高度

### 关键方法

`videoScaleAndCropFactor ` 调整焦距的属性,最小值是1,所以为了安全每个value再加上1

```
AVCaptureConnection * videoConnection = [self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo];

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

```

我定义个一个方法讲手势操作之后获取的`value`传进来

```
- (void)adjustFocalWtihValue: (CGFloat)value
```

### 在控制器中调用
#### 初始化
声明一个属性`zoomScale`,因为默认是最大的,所以初始化为1

```self.zoomScale = 1;```

相机的焦距也是最大的为10

```[self.cameraModule adjustFocalWtihValue:10];```

在view上添加捏合手势和拖拽手势

#### 计算
拖拽手势中
```
/// 滑动的距离
CGPoint trans = [panGest translationInView:panGest.view];
/// 获取到圆圈的中心y值
CGFloat circleCenterY = [self.adjustFocal getCircleCenterY]; /// circleY
/// y值自增
circleCenterY += trans.y;
/// 获取到滑动总距离
CGFloat totalHeight = [self.adjustFocal getSliderHeight]; /// 滑动总长度
/// 处理顶部越界
if (circleCenterY <= 20) {
circleCenterY = 20; /// 处理顶部
}
/// 处理底部越界

if (circleCenterY >= self.adjustFocal.gh_height - 40 + 20) {
circleCenterY = self.adjustFocal.gh_height - 40 + 20;
}

/// 刷新圆圈的y值
self.adjustFocal.circleCenterY = circleCenterY;
/// 计算比例
CGFloat scale = (totalHeight - circleCenterY + 20)/totalHeight;
self.zoomScale = scale;
self.test.transform = CGAffineTransformMakeScale(scale, scale);
self.value.text = [NSString stringWithFormat:@"比例%.2f",scale];
/// 重置
[panGest setTranslation:CGPointZero inView:panGest.view];
/// 动态改变相机焦距
[self.cameraModule adjustFocalWtihValue:scale * 10];
```
---
收藏
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0
下载过该代码的还下载了
本周热门下载
综合评论
提示
sina weixin mail 回到顶部