保持Zoom以Uiview Center为中心(而不是从左上角进行缩放)



我正在实现基于捏合的变焦,并且比例从视图的左上角发生,而不是从中心缩放。经过几次尝试(这似乎是CS来源问题之类的),找不到一个好的解决方案,但是必须有一些(也许是显而易见的)方法可以从视图中心进行扩展。如果以前已经回答过,请欣赏答案的指针(在大量搜索后找不到)。如果没有,将欣赏正确方法的输入。

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

func pinchdetected(pinchgesturerecognizer:uipinchgesturerecognizer){

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

}

捏合时,视图内的内容将向右和向下扩展,而不是向左和向上扩展(因此,假设它不是从"中心"缩放)。希望这使它变得更加清晰。

很难不看到您的代码而知道发生了什么。默认情况下,转换确实在视图中心上行动,这似乎是您想要的。您可以通过更改视图层上的锚点属性来在其他点上行动。

或者,您可以通过将原点转换为该点,进行转换并再次翻译来创建有关任意点的转换。例如:

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)

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

这是您要寻找的代码

view.transform = CGAffineTransformScale(view.transform, 1.1, 1.1);

或在Swift

view.transform = view.transform.scaledBy(x: 1.1, y: 1.1)

这将增加提供的量表的视图高度和宽度。现在您可以使用手势识别器来控制金额。

您应该能够在此问题中使用代码以使其从中心放大。如果您想从手指放大,请参阅该问题的答案。

最新更新