我想实现一个简单的捏缩放姿态在一个QR应用程序。
这似乎很简单,所以我做了一些研究,找到了一些解决这个问题的可能答案:
How to implement "pinch to zoom" in custom camera
Zooming while capturing video using AVCapture in iOS
不幸的是,没有一个真正解决了我想要的问题,我个人喜欢第一个(在Objective中),我试着用Swift 3来解决它。
我用我想出的代码发布了一个答案,经过一些尝试,其他更简单/更好/更简单的解决方案都受到欢迎:)
发布于 2017-04-07 12:52:30
我使用了故事板中的Pinch Gesture Recognizer,然后链接到这个操作:
@IBAction func pinchToZoom(_ sender: UIPinchGestureRecognizer) {
guard let device = captureDevice else { return }
if sender.state == .changed {
let maxZoomFactor = device.activeFormat.videoMaxZoomFactor
let pinchVelocityDividerFactor: CGFloat = 5.0
do {
try device.lockForConfiguration()
defer { device.unlockForConfiguration() }
let desiredZoomFactor = device.videoZoomFactor + atan2(sender.velocity, pinchVelocityDividerFactor)
device.videoZoomFactor = max(1.0, min(desiredZoomFactor, maxZoomFactor))
} catch {
print(error)
}
}
}注意,captureDevice是类AVCaptureDevice的一个可选对象。
发布于 2017-12-24 01:11:07
@IBAction func pinchToZoom(_ sender: UIPinchGestureRecognizer) {
guard let device = captureDevice else { return }
func minMaxZoom(_ factor: CGFloat) -> CGFloat { return min(max(factor, 1.0), device.activeFormat.videoMaxZoomFactor) }
func update(scale factor: CGFloat) {
do {
try device.lockForConfiguration()
defer { device.unlockForConfiguration() }
device.videoZoomFactor = factor
} catch {
debugPrint(error)
}
}
let newScaleFactor = minMaxZoom(sender.scale * zoomFactor)
switch sender.state {
case .began: fallthrough
case .changed: update(scale: newScaleFactor)
case .ended:
zoomFactor = minMaxZoom(newScaleFactor)
update(scale: zoomFactor)
default: break
}
}https://stackoverflow.com/questions/43278701
复制相似问题