iOS AV Foundation 二维码扫描 05 缩放摄像头
最后一节,我们为程序添加通过手势对摄像头进行缩放控制的功能。
添加实例变量,并在viewDidLoad方法的最后,进行初始化:
CGFloat _initialPinchZoom;
[_previewView addGestureRecognizer:[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchDetected:)]];实现pinchDetected:方法:
- (void)pinchDetected:(UIPinchGestureRecognizer*)recogniser { // 1 if (!_videoDevice) return; // 2 if (recogniser.state == UIGestureRecognizerStateBegan) { _initialPinchZoom = _videoDevice.videoZoomFactor; } // 3 NSError *error = nil; [_videoDevice lockForConfiguration:&error]; if (!error) { CGFloat zoomFactor; CGFloat scale = recogniser.scale; if (scale < 1.0f) { // 4 zoomFactor = _initialPinchZoom - pow(_videoDevice.activeFormat.videoMaxZoomFactor, 1.0f - recogniser.scale); } else { // 5 zoomFactor = _initialPinchZoom + pow(_videoDevice.activeFormat.videoMaxZoomFactor, (recogniser.scale - 1.0f) / 2.0f); } // 6 zoomFactor = MIN(10.0f, zoomFactor); zoomFactor = MAX(1.0f, zoomFactor); // 7 _videoDevice.videoZoomFactor = zoomFactor; // 8 [_videoDevice unlockForConfiguration]; } }
- 检查是否有可用的视频设备。
- 在手势识别开始时,记录初始缩放因子。
- 在开始修改视频设备参数前,锁定视频设备。
- 如果锁定成功,计算手势行为,scale小于1.0表示用户两指间距离在缩小,程序需要放大摄像头。
- scale大于1.0表示用户两指间距离在变大,程序需要缩小摄像头。第4步和第5步中的计算公式是为了让缩放看起来更自然。
- 限制缩放的最大最小值。
- 为视频设备设置缩放因子。
- 最后,解锁视频设备。
编译执行,在手机上缩放效果如下:
转载请注明出处:
http://blog.csdn.net/yamingwu/article/details/44535787
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。