我正在尝试使用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)
答案 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的变换。