我正在制作一个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:
右上角的十字按钮是动画弹出窗口的子视图。我想要的是十字按钮不应该在动画视图之外。例如,在第二个屏幕截图中,只有半交叉按钮应该是可见的。外部部分不应该是可见的
答案 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设置动画以消失,反之亦然。