21

您如何找到 a 的当前比例(缩放级别)UIView

4

6 回答 6

51

如果您正在对视图应用缩放变换,则该变换将通过UIView 上的transform属性(适当地)可用。根据CGAffineTransform 文档,比例变换将在变换矩阵的坐标 (1,1) 和 (2,2) 处具有非零值;因此,您可以通过以下方式获得 x 和 y 比例因子:

CGFloat xScale = view.transform.a;
CGFloat yScale = view.transform.d;
于 2012-08-20T15:10:00.560 回答
12

根据此来源,使用此方法可为您提供比例,而不管应用于变换的旋转或平移:

func scale(from transform: CGAffineTransform) -> Double {
    return sqrt(Double(transform.a * transform.a + transform.c * transform.c));
}

我知道我迟到了,但接受的答案对我来说不起作用。

于 2017-09-14T15:38:36.560 回答
3

使用围绕CGAffineTransform变换矩阵的一些数学运算,您可以计算比例。这也在玛格丽特的评论中提到。Swift 允许你编写一个带有计算属性的简单扩展:

extension CGAffineTransform {
    var scale: Double {
        return sqrt(Double(a * a + c * c))
    }
}

因此,稍后您可以通过scale直接在 上调用 a 来使用CGAffineTransform,如下所示:

let someViewScale = someView.transform.scale
于 2019-09-30T19:21:33.180 回答
1

该功能由 UIScrollView 及其 zoomScale 属性提供。

编辑:

知道当前尺度由变换矩阵给出。如您所知,比例值在这里:

sx, 0,  0
0 , sy, 0
. . .. ,1. 

要获取当前状态,只需记录转换的状态。但是,要返回该状态,您需要使用上次转换的逆或加载单位矩阵。

于 2012-08-20T15:03:06.977 回答
1

检查这个它会帮助你....在这个你可以学习如何使用UIPinchGestureRecognizer....设置最小和最大缩放比例。如何使用 UIPinchGestureRecognizer 设置最小和最大缩放比例

于 2012-08-20T15:14:29.720 回答
0

那不是contentScaleFactor参考)吗?

于 2012-08-20T15:09:25.383 回答