使用自动布局设置超级视图动画时,UILabel向右移动

时间:2015-09-30 23:46:19

标签: ios objective-c animation autolayout uilabel

在下面的.gif中,我有一个与设备屏幕尺寸相同的视图(米色背景)。该视图有一个子视图(紫色背景),我使用自动布局定位。它被设置为与其超视图相同的宽度,其常量值为-18,并且其CenterX值设置为与其超视图相同,因此它的中心位于每侧9pts的空间。

在该视图的内部,是一个UILabel,也使用自动布局定位。它被设置为与其超视图相同的宽度,其常数值为-20,其CenterX与其超视图相同,因此它的每一侧都有10个空间。

当用户点击紫色视图时,我想执行多步动画,其中第一步涉及紫色视图扩展为与其超视图相同的宽度。

我正在使用以下代码执行此操作:

[UIView animateWithDuration:3.0 animations:^{
    [constraint setConstant:0.0];
    [view.superview layoutIfNeeded];
}];

问题(如第一个.gif中所示)是UILabel立即向右移动,然后在动画播放时逐渐回到中心。

动画不正确:

Incorrect animation:

然而,在下一个.gif中,动画正确执行。我使用相同的代码来执行动画,但不是使UILLabel的宽度与其超级视图相同(减去20pts),而是将宽度硬编码为静态值,使用0作为约束乘数,和357作为常数值。

纠正动画:

Correct animation:

这实现了我想要实现的效果,但我宁愿不用硬编码UILabel的宽度(另外我很好奇它为什么这样做)。

有什么想法吗?

0 个答案:

没有答案