2014-05-08 29 views
0

我有三个UIImageViews(A,B,C)排列在一个UIView,并排。在第一个UIImageView(A)后面,有一个简单的UIView(让我们称之为X)带有绿色背景。当用户点击A,B,C图像视图中的一个时,我移动(并设置动画)背景视图X,并使其中心等于点击的视图中心。例如,如果X是背后的一个开始,而B被窃听,然后将下面的代码将执行:UIView动画撤消了以前的动画

[UIView animateWithDuration:0.5 
       animations:^{ X.center = B.center } 
       completion:nil]; 

这将移动X落后B.

现在,我的窗口还包含另一种看法(让我们把它叫做V),即挖掘时,动画通过调用

[UIView animateWithFramesWithDuration ... ] 

然而,当这个动画完成,第一动画撤消(X背后的一个总移动)。为什么会发生?我能做些什么来解决这个问题?

回答

1

正如您在您的answer中所说的那样,这只能在故事板中创建的视图中重现。故事板中是否启用了自动布局?如果是这样,你不应该动画center,我希望你看到的行为,如果你是。当您以编程方式创建视图时,如果您未将translatesAutoresizingMaskIntoConstraints设置为NO,那么当您动画center时,动画应该按预期工作。

对自动布局约束管理的视图设置动画效果的正确方法是更新约束以表示新布局,然后在[UIView animateWith…]块中在适当的视图上调用-layoutIfNeeded

+0

谢谢。自动布局确实启用了,尽管我没有在我的视图中使用任何约束。 – John

+0

我相信在Xcode中故事板中设置了隐式约束,用于没有设置约束的任何视图。基本上,在Xcode 5中启用Auto Layout后,视图的行为就像拥有默认的自动识别遮罩一样,直到您设置自己的约束。比Xcode 4坚持总是有有效的约束要好得多,这使得它们很难合作。 –

0

看来问题只存在于在Storyboard中创建的UIViews。对于以编程方式创建的UIViews,问题不会显示。