变换后更新点

update point after transform

我正在尝试使用 CGAffineTransform 更改视图位置,但转换语句不会影响它。

例如,让我们调用移动的视图movingView

开始时,movingView在点CGPoint(x: 100, y: 100) 然后我用这个代码移动 movingView :

movingView.transform = CGAffineTransform(translationX: 100, y: 300)

现在如果我这样做:print(movingView.layer.position),我仍然得到

CGPoint(x: 100, y:100)

而不是

CGPoint(x: 200, y: 400)

对视图(或图层)应用变换不会更新其中心位置(或位置)。它改变视图(或层)在屏幕上的显示方式和位置,但不改变其 center、(或 position)或 bounds 属性的值。

如果您想知道该点如何受平移影响,那么您可以通过对其应用变换来计算一个新点:

let point = CGPoint(x: 100, y: 200)
let transform = CGAffineTransform(translationX: 20, y: 40)
let transformedPoint = point.applying(transform) // x: 120, y: 240

实际上,如果将视图添加到SuperView,改变的是View的框架。 检查:movingView.frame.origin.

UIView的CALayer的transform已经改变:

CGPoint.init(x: movingView.layer.transform.m41, y: movingView.layer.transform.m42)

所以视图的变换是基于CALayer的变换。