CGAffineTransformMakeTranslation与CGRectOffset动画

时间:2015-10-23 14:46:10

标签: ios animation uiview cgaffinetransform

不确定这是否与我的问题相关,但我有一个动画序列,可以使用以下代码将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替换了移动视图的方法时,毛刺似乎已经消失了。

我的问题是:

  • 这两种方法之间的最终结果差异(如果有的话)是什么? 动画(“移动”)对象的位置?

如果有,可以    这解释了我遇到闪光的原因    动画期间屏幕的底部(几乎就像是设置    它的框架到屏幕的底部)。如果这不是很清楚,我有一个单独的帖子,更具体地询问这个“故障”,并对我的CGRectOffset Glitch进行更深入的解释。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

不同之处在于,自动布局希望能够完全控制视图的centerbounds.size,并在任意时间根据安装的约束重置它们。

自动布局非常谨慎(从iOS 8.0开始),以避免查看您的视图transform。您的变换应用于自动布局设置的框架之上,自动布局永远不会重置它。

因此,您可以使用变换或更新其约束来为视图的位置设置动画。尝试通过直接设置框架来设置其位置的动画会导致意外行为。