转换后更新点

时间:2018-11-05 18:50:56

标签: ios swift cgaffinetransform cgpoint

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

例如,让我们调用移动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)

2 个答案:

答案 0 :(得分:3)

将变换应用于视图(或图层)不会更新其中心位置(或位置)。它会更改视图(或图层)在屏幕上的显示方式和位置,但不会更改其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

答案 1 :(得分:-1)

实际上,如果将视图添加到SuperView,则View的框架会发生变化。 检查:movingView.frame.origin

UIView的CALayer转换已更改:

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

因此,视图的变换基于CALayer的变换。