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 替换了移动视图的方法,故障似乎就消失了离开。

我的问题是:

如果有的话可以 这解释了我在 动画期间屏幕底部(几乎就像设置 它的框架到屏幕底部)。如果这不是很清楚,我有一个单独的 post,它更具体地询问这个 "glitch",并对我的 CGRectOffset Glitch 有更深入的解释。

感谢您的帮助!

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

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

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