计算 UIView 的比例

问题描述 投票:0回答:4

假设我的

UIView
当前的比例是
x
。假设我对数量
UIView
y
应用比例变换,即:

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

。如何确定发生尺度变换后

UIView
的尺度值是多少(以
x
y
表示?)。

iphone ios cocoa-touch cgaffinetransformscale
4个回答
0
投票

比例变换将当前比例与比例 y 相乘。 如果视网膜的比例为 2.0,则之后为 y* 2.0。
所以 x*y 就是答案。但不要忘记 x.achsis 尺度和 y achsis 可能不同。
x 和 y 的比例令人困惑,如果在代码中 y 和 x 轴上有不同的比例,最好使用 s1 和 s2,或 sx,sy。


0
投票

缩放通过乘法组合,平移(移动)通过加法组合,旋转是矩阵乘法。所有这三个都可以组合成一个 AffineTransformation(比空间维度多 1 行的矩阵),它们通过矩阵乘法组合起来。 2D AffineTransformations 是 3x2 或 3x3 矩阵,额外的列只是使它们更易于使用。

编辑: 使用更清晰的名称:如果当前比例为 currxs、currys,并且应用的比例为 xs、ys,则新比例将为 currxs*xs、currys*ys。请注意,应用比例也会缩放 AffineTransformation 中包含的任何平移组件,这就是应用顺序很重要的原因。


0
投票

如果您只使用 CGAffineTransformScale 而不是旋转等其他转换,则非常简单,您可以使用视图框架和边界大小来计算结果比例值。

float scaleX = view.frame.size.width/view.bounds.size.width;
float scaleY = view.frame.size.height/view.bounds.size.height;

0
投票
 var currentZoomScale: CGFloat = 1.0

...

@objc
private func handlePinch(_ sender: UIPinchGestureRecognizer) {
    mainContentView.transform = mainContentView.transform.scaledBy(x: sender.scale, y: sender.scale)
    currentZoomScale *= sender.scale
    sender.scale = 1
}
© www.soinside.com 2019 - 2024. All rights reserved.