变换后更新点
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的变换。
我正在尝试使用 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的变换。