通过自动调整子视图动画UIView帧大小更改

时间:2011-12-21 16:36:31

标签: iphone ios animation subview

我有一个包含两个子视图的UIView。我想用动画改变superview的帧大小,并让子视图的大小根据其自动大小的掩码而改变。

[UIView beginAnimations:@"Resize" context:nil];
[UIView setAnimationDuration:1.0];
CGRect frame = self.myView.frame;
frame.size.height += 30.0;
self.myView.frame = frame;
[UIView commitAnimations];

视图self.myView按预期调整大小超过1秒,但子视图会立即调整大小。有谁知道为什么会发生这种情况以及如何让子视图为其大小调整设置动画?

从我的谷歌搜索,我认为它可能与contentMode属性有关。不幸的是,我不清楚该财产的作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:14)

虽然在[UIView commitAnimations]之后我会问你在做什么,但是很难让别人给你正确的答案而不会看到你的代码。不过,很高兴你明白了。我建议你使用块动画。通过使用完成块,它们更容易避免这种类型的错误。例如:

[UIView animateWithDuration:1.0
                 animations:^{
                     CGRect frame = self.myView.frame;
                     frame.size.height += 30.0;
                     self.myView.frame = frame;
                 }
                 completion:^(BOOL finished){
                     // whatever you need to do when animations are complete
                 }];

答案 1 :(得分:1)

好的,所以我在阅读了以下问题的答案后想出了问题:Animating a UIView frame, subview UIScrollView doesn't always animate

在我安排动画之后我基本上做了一些工作,这导致在我的每个子视图上调用layoutSubviews,这会自动导致这些视图被安排在动画的结束点。通过在完成这项工作后安排我的动画,我能够解决我的问题。