CGAffineTransformMakeTranslation 与 CGRectOffset 动画
CGAffineTransformMakeTranslation vs. CGRectOffset Animation
不确定这是否与我的问题相关,但我有一个动画序列可以使用以下代码将 UIView
移出框架:
[UIView animateWithDuration:0.3
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
_popupView.transform = CGAffineTransformMakeTranslation(0, -750);
}
completion:^(BOOL finished) {
_popupView.alpha = 0.0f;
}];
我之前一直在用这个INSTEAD上面的动画
....
animations:^{
_popupView.frame = CGRectOffset(_popupView.frame, 0, -750);
}
无论出于何种原因,我在执行 CGRectOffset
时遇到了一些奇怪的故障错误,但是一旦我用 CGAffineTransfromMakeTranslation
替换了移动视图的方法,故障似乎就消失了离开。
我的问题是:
- 这两种方法之间的最终结果差异是什么(如果有的话)
动画("moving")对象的位置?
如果有的话可以
这解释了我在
动画期间屏幕底部(几乎就像设置
它的框架到屏幕底部)。如果这不是很清楚,我有一个单独的 post,它更具体地询问这个 "glitch",并对我的 CGRectOffset Glitch 有更深入的解释。
感谢您的帮助!
不同之处在于,自动布局期望完全控制视图的 center
和 bounds.size
,并会在任意时间根据安装的约束重置它们。
自动布局非常小心(从 iOS 8.0 开始)甚至避免查看视图的 transform
。您的变换应用在自动布局设置的框架之上,自动布局永远不会重置它。
因此,您可以使用变换或通过更新其约束来为视图的位置设置动画。尝试通过直接设置其框架来为其位置设置动画会导致意外行为。
不确定这是否与我的问题相关,但我有一个动画序列可以使用以下代码将 UIView
移出框架:
[UIView animateWithDuration:0.3
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
_popupView.transform = CGAffineTransformMakeTranslation(0, -750);
}
completion:^(BOOL finished) {
_popupView.alpha = 0.0f;
}];
我之前一直在用这个INSTEAD上面的动画
....
animations:^{
_popupView.frame = CGRectOffset(_popupView.frame, 0, -750);
}
无论出于何种原因,我在执行 CGRectOffset
时遇到了一些奇怪的故障错误,但是一旦我用 CGAffineTransfromMakeTranslation
替换了移动视图的方法,故障似乎就消失了离开。
我的问题是:
- 这两种方法之间的最终结果差异是什么(如果有的话) 动画("moving")对象的位置?
如果有的话可以 这解释了我在 动画期间屏幕底部(几乎就像设置 它的框架到屏幕底部)。如果这不是很清楚,我有一个单独的 post,它更具体地询问这个 "glitch",并对我的 CGRectOffset Glitch 有更深入的解释。
感谢您的帮助!
不同之处在于,自动布局期望完全控制视图的 center
和 bounds.size
,并会在任意时间根据安装的约束重置它们。
自动布局非常小心(从 iOS 8.0 开始)甚至避免查看视图的 transform
。您的变换应用在自动布局设置的框架之上,自动布局永远不会重置它。
因此,您可以使用变换或通过更新其约束来为视图的位置设置动画。尝试通过直接设置其框架来为其位置设置动画会导致意外行为。