ios - 如何从以前的比例开始捏缩放手势?

标签 ios swift

我正在尝试使用捏合手势识别器来上下缩放 UITextView,但它始终以 1.0 的比例开始。 我试图实现这些答案:
iOS Pinch Zoom Start from Previous Scale
UIPinchGestureRecognizer. Make zoom in location of fingers, not only center
Pinch gesture scale resetting to 1?

但我一定是做错了什么,因为它每次仍然重置为 1.0 的比例。这是我的代码:

@objc func pinchRecognized(recognizer: UIPinchGestureRecognizer) {

var lastScale:CGFloat = 1.0

    if let view = recognizer.view as? UITextView {

        if (recognizer.state == .began) {
            lastScale = 1.0
        }

        let scale = 1.0 - (lastScale - recognizer.scale)

        view.transform = CGAffineTransform(scaleX: scale, y: scale)
        view.font = UIFont.systemFont(ofSize: 40 * scale)

        lastScale = recognizer.scale

    }
}

最佳答案

变量lastScale 将始终为1,因为此方法一旦被使用就会从内存中删除,直到再次调用。因此,lastScale 将始终重置为 1。最重要的是,您有 recognizer.state == beginning 并设置 lastScale = 1,这意味着每次调用新触摸时,lastscale = 1

您应该做的是创建一个全局变量,而不是局部变量,然后调整该比例。这将允许它不会每次都重置回 1。此外,永远不要重置 lastScale,除非您按下某个重置功能。想一想 - 为什么要在设置 lastScale 后重置它?

关于ios - 如何从以前的比例开始捏缩放手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54228949/

相关文章:

objective-c - 将核心数据信息转换为 XML,反之亦然

ios - 无法在容器 View 中加载 xml 数据

ios - 如何通过 swift 包管理器在 swift 项目中添加 Alamofire

json - Alamofire检查返回的数据

ios - 根据三个变量对数组进行排序

iphone - 隐藏 TabBar 时设置 View 中的 Toolbar 位置

iphone - 如何在 iOS 中显示和编辑 HTML?

ios - 有没有办法在模拟器中更改 iOS7.1 'button shapes' 设置?

swift - iOS 8 SDK、Swift、MapKit 绘制路线

ios - 使用 NSTimer 从 0.00 计数到 176.20