1

我正在为包含 11 个子视图(7 个按钮、2 个标签、2 个图像视图)的 uiview(名为“popupVw”的父视图)制作动画。最初的帧大小是:

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 height 出现的弹出窗口。此弹出窗口包含子视图和右上角的关闭按钮。通过单击此关闭按钮,弹出窗口再次从 300 降低到 0 的高度。父弹出视图正在正确设置动画。但是在高度增加到最大值之前,子视图是可见的。& 可见,直到父视图的高度再次变为 0。所以基本上只有父视图是动画而不是内部视图。

动画在父视图上正常工作,但子视图没有与父视图一起动画。结果,当我将 uiview 的高度从 300 更改为 0 时,所有子视图仍然可见并且只有父 uiview 的高度变为 0。

我需要为他们单独放动画吗?如果是,那么我该怎么做才能改变高度?或者有没有其他方法可以用来达到相同的结果?

我试过自动调整面具。但它不适合我:

pointerImgVw.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin  ;

以下是问题的根源:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

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

4

2 回答 2

8

将父视图的clipsToBounds属性设置为YES

即 parentView.clipsToBounds=YES

于 2013-05-28T11:27:04.943 回答
2

尝试使用options:UIViewAnimationOptionLayoutSubviews.

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

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

于 2013-05-26T11:06:40.240 回答