如何在自定义相机中实现“捏缩放”
我有一个自定义照片/摄像机(想想Snapchat),带有一个捏合识别器来放大/缩小。 基于我在网上找到的一些代码,这是正确的:
- 放大一些工作正常
- 捕获图像会捕获缩放的图像
这是我需要帮助的问题:
- 缩小导致崩溃
- 虽然放大工作,但如果我放大,似乎重置缩放,停止触摸屏幕,然后尝试再次放大。
- 捕获video会重置缩放
这是我的捏手势代码,应该改变什么?
for input in self.captureSession.inputs { // check that the input is a camera and not the audio if input.device == self.frontCameraDevice || input.device == self.backCameraDevice { if pinch.state == UIGestureRecognizerState.Changed { let device: AVCaptureDevice = input.device let vZoomFactor = pinch.scale do{ try device.lockForConfiguration() if vZoomFactor <= device.activeFormat.videoMaxZoomFactor { device.videoZoomFactor = vZoomFactor device.unlockForConfiguration() } }catch _{ } } } }
您必须根据以前的值设置videoZoomFactor。
do { try device.lockForConfiguration() switch gesture.state { case .began: self.pivotPinchScale = device.videoZoomFactor case .changed: var factor = self.pivotPinchScale * gesture.scale factor = max(1, min(factor, device.activeFormat.videoMaxZoomFactor)) device.videoZoomFactor = factor default: break } device.unlockForConfiguration() } catch { // handle exception }
你应该保存以前的比例因子,以便从当前的缩放状态开始放大/缩小,self.pivotPinchScale在上面的例子中是关键。 我希望你能从以下例子中得到一些提示。
当你缩小pinch.scale值将小于1.0,然后应用程序将崩溃。
方法-1
//just change this line if pinch.scale > 1.0 { device.videoZoomFactor = vZoomFactor } else { device.videoZoomFactor = 1.0 + vZoomFactor }
方法 – 2
您可以通过转换avcapturesession预览图层来实现缩放缩放。
yourPreviewLayer.affineTransForm = CGAffineTransformMakeScale(1.0 + pinch.scale.x, 1.0 +pinch.scale.y)
当video捕获方法调用将预览层转换为标识时。 所以它会重置缩放。
yourPreviewLayer.affineTransForm = CGAffineTransformIdentity
- 如何从Sencha Touch / Phonegap应用程序中的虚拟键盘中删除“下一步”和“上一步”button
- 如何为iOS的FirebaseUIlogin添加背景图片?
- 当我们在iPhone SDK中绘制时如何“撤消”?
- 如何在swift中从“2015-06-26T00:10:00 + 01:00”得到yyyy-mm-dd hh:mm:ss格式
- 适用于iOS的Facebook SDK v4.0 – 未设置FBSDKProfile currentProfile
- 设置TeamCity集成到OSX Build Agent
- CCCryptor的使用是否需要法国import报关证书?
- 当通知被点击时,如何在Swift 3中处理启动选项? 获取语法问题
- 检测iOS Google+login不完整。