ios - 保持缩放以 UIView 中心为中心(而不是从左上角缩放)

标签 ios swift uiview zooming uipinchgesturerecognizer

我正在实现基于捏合的缩放,并且缩放从 View 的左上角发生,而不是从中心缩放。经过几次尝试(这似乎是 cs 原点问题或类似问题),没有找到一个好的解决方案,但必须有一些(也许是明显的)方法从 View 中心进行缩放。如果之前已经回答过这个问题,希望能找到答案(经过广泛搜索后未找到)。如果没有,我们将感谢您提供正确方法的意见。

编辑以下答案(谢谢): 这是我最初使用的代码:

funcinchDetected(pinchGestureRecognizer:UIPinchGestureRecognizer){

    let scale = pinchGestureRecognizer.scale
    view.transform = CGAffineTransformScale(view.transform, scale, scale)
    pinchGestureRecognizer.scale = 1.0

}

捏合时, View 内的内容将向右和向下扩展,而不是向左和向上扩展(因此假设它不是“从中心”缩放)。希望这能让它更清楚。

最佳答案

如果不查看代码,就很难知道发生了什么。默认情况下,变换确实作用于 View 中心,这似乎就是您想要的。您可以通过更改 View 层上的anchorPoint 属性来使变换作用于其他点。

或者,您可以通过将原点平移到该点,进行变换,然后再次平移回来,来创建关于任意点的变换。例如:

func *(left: CGAffineTransform, right: CGAffineTransform) -> CGAffineTransform {
    return left.concatenating(right)
}


public extension CGAffineTransform {
    static func scale(_ scale:CGFloat, aboutPoint point:CGPoint) -> CGAffineTransform {
        let Tminus = CGAffineTransform(translationX: -point.x, y: -point.y)
        let S = CGAffineTransform(scaleX: scale, y: scale)
        let Tplus = CGAffineTransform(translationX: point.x, y: point.y)
    
        return Tminus * S * Tplus
    }
}

view.transform = CGAffineTransform.scale(2.0, aboutPoint:point)

该点相对于原点,默认情况下为中心。

关于ios - 保持缩放以 UIView 中心为中心(而不是从左上角缩放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352186/

相关文章:

ios - iTunes 连接 : Can't See Build after processing

swift - 使用 NSPathControl 表示虚拟路径

swift - 使用闭包属性满足 Swift 协议(protocol)方法?

iOS PDFKit 不填充 UIView

ios - 如何为 UIView 创建拖动动画?

ios - 查看附近所有可发现的蓝牙设备 - Swift iOS XCode

android - 如何为 Flutter 应用启用密码管理器自动填充功能?

iOS 交互动画 Swift

ios - iOS 中 ViewController 顶部出现随机灰色条(swift)

ios - 以编程方式添加重复的 uiview