使用动画更改uiview的帧大小不会自动更改子视图的帧大小

时间:2013-05-26 06:52:42

标签: iphone animation uiview subviews

我正在制作一个uiview(名为'popupVw'的父视图)的动画,其中包含11个子视图(7个按钮,2个标签,2个imageview)。最初的帧大小是:

CGRect Frame = CGRectMake(10, 10 ,320, 0);

&安培;新的帧大小是:

CGRect newFrame = CGRectMake(10, 10 ,320, 300);



[UIView animateWithDuration:0.5
                 animations:^{popupVw.frame = newFrame;}
                 completion:^(BOOL finished){
                     // do stuff here after animation finished
                 }];

所以基本上我将视图的高度从0更改为300。 &安培;然后再从300到0。实现秀隐藏动画。

将其视为屏幕中间的弹出窗口,从0到300高度显示。此弹出窗口包含子视图&右上角的关闭按钮。通过单击此关闭按钮,弹出窗口再次从300减少到高度0.父弹出视图正确动画。但是在高度增加到最大值之前,子视图是可见的。 &安培;直到父视图的高度再次变为0才可见。所以基本上只有父视图才是动画效果。不是内在的观点。

动画在父视图上正常工作,但子视图不是父视图的动画。因此,当我将uiview的高度从300更改为0时,所有子视图仍然可见&只有父uiview的高度变为0。

我是否需要单独为它们添加动画?如果是的话,我怎么能为高度变化做这个?或者是否有其他方法可以用来实现相同的结果?

我尝试过autoresizing mask。但它不适合我:

pointerImgVw.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin  ;

以下是问题的srceengrabs:

enter image description here enter image description here enter image description here

右上角的十字按钮是动画弹出窗口的子视图。我想要的是十字按钮不应该在动画视图之外。例如,在第二个屏幕截图中,只有半交叉按钮应该是可见的。外部部分不应该是可见的

2 个答案:

答案 0 :(得分:8)

将父视图的 clipsToBounds 属性设置为

即parentView.clipsToBounds = YES

答案 1 :(得分:2)

尝试使用options:UIViewAnimationOptionLayoutSubviews

[UIView animateWithDuration:0.5
                          delay:0.0
                        options:UIViewAnimationOptionLayoutSubviews
                     animations:^{
                         // animate here...
                     }
                     completion:nil];

编辑: 好的,我知道了。然后你需要在动画视图中有另一个视图(让我们称之为coverView)。 coverView将与动画视图的大小相同,并且将位于所有其他子视图之上,因此它会隐藏它们。现在,当您打开视图的动画时,您应该为coverView设置动画以消失,反之亦然。