【发布时间】:2012-08-20 14:56:16
【问题描述】:
如何找到UIView 的当前比例(缩放级别)?
【问题讨论】:
-
你是否使用 scrollView 进行缩放?
-
不,我使用 UIPinchGestureRecognizer 和 CGAffineTransformScale。
标签: ios objective-c uiview zooming scale
如何找到UIView 的当前比例(缩放级别)?
【问题讨论】:
标签: ios objective-c uiview zooming scale
如果您正在对视图应用缩放变换,则该变换将通过 UIView 上的 transform property 可用(足够恰当)。根据CGAffineTransform docs,比例变换将在变换矩阵的坐标 (1,1) 和 (2,2) 处具有非零值;因此,您可以通过以下方式获得 x 和 y 比例因子:
CGFloat xScale = view.transform.a;
CGFloat yScale = view.transform.d;
【讨论】:
sqrt(Double(transform.a * transform.a + transform.c * transform.c))。
根据这个source,使用此方法可以为您提供比例,而不管应用于变换的旋转或平移:
func scale(from transform: CGAffineTransform) -> Double {
return sqrt(Double(transform.a * transform.a + transform.c * transform.c));
}
我知道我迟到了,但接受的答案对我来说不起作用。
【讨论】:
使用围绕CGAffineTransform 变换矩阵的一些数学运算,您可以计算出一个比例。 Margaret's comment 中也提到了这一点。 Swift 允许你编写一个带有计算属性的简单扩展:
extension CGAffineTransform {
var scale: Double {
return sqrt(Double(a * a + c * c))
}
}
所以,以后你可以通过在CGAffineTransform上直接调用scale来使用,像这样:
let someViewScale = someView.transform.scale
【讨论】:
检查它会对您有所帮助....在此您可以学习如何使用UIPinchGestureRecognizer 设置最小和最大缩放比例 ....How to set minimum and maximum zoom scale using UIPinchGestureRecognizer
【讨论】:
UIScrollView 和它的 zoomScale 属性提供了该功能。
编辑:
知道当前的尺度是由变换矩阵给出的。如您所知,比例值在这里:
sx, 0, 0
0 , sy, 0
. . .. ,1.
要获取当前状态,只需记录转换的状态即可。但是,要返回该状态,您需要使用上次转换的逆矩阵或加载单位矩阵。
【讨论】:
那不是contentScaleFactor(reference)吗?
【讨论】: