iOS动画一个包括子视图的视图

6

我正在尝试为一个包含一些子视图的视图制作折叠动画。

[UIView beginAnimations:@"advancedAnimations" context:nil];
[UIView setAnimationDuration:3.0];

CGRect aFrame = aView.frame;
aView.size.height = 0;
aView.frame = aFrame;

[UIView commitAnimations];

这个动画对aView来说很好,但是对于子视图来说却没有像预期的那样折叠。 我该如何使子视图也一起折叠?此外,在折叠后是否有一种重新计算原始大小的方法?
谢谢。
4个回答

5
您可能忘记为子视图应用一些自动调整大小的掩码。如果您这样做了
for (UIView *subview in aView.subviews) {
    subview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin);
}

它应该可以正常工作。

但是,个人而言,我会像lamelas所说的那样使用。

aView.transform = CGAffineTransformMakeScale(1.0,0.0);

还不错,但我想做的是折叠视图,随着它变小而隐藏其内容。CGAffineTransformMakeScale会缩放整个内容。顺便说一下,在变换中不能使用0.0。 - toppless
你在哪里看到我们不能在变换中使用0.0?无论如何,我不确定你的问题是什么...你想让你的子视图缩放,还是希望它们在动画发生时被裁剪? - Zoleas
尝试将其设置为0.0并查看动画效果,然后将其与设置为0.001进行比较。我正在努力不调整子视图的大小,而是让主视图变小时产生“滑门”效果。 - toppless
好的,你只需要将主视图的属性clipToBounds设置为YES即可。 - Zoleas
关于在转换(CGAffine + CA3D)中设置零值,iOS 6+似乎可以让它滑动并适当地进行动画处理。但是为了兼容性,最好使用“.001”技巧。 - walkingbrad

4
尝试使用以下内容进行动画效果:
aView.transform = CGAffineTransformMakeScale(1.0,0.0);

效果更好了,但动画有点奇怪——试图将视图“挤压”到中心点。 - toppless

0

设置autoresizingMask的Swift语法与ObjC略有不同:

for subview in view.subviews {
    subview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]
}

0

一个有根据的猜测:

[UIView beginAnimations:@"advancedAnimations" context:nil];
[UIView setAnimationDuration:3.0];

CGRect aFrame = aView.frame;
aView.size.height = 0;
aView.frame = aFrame;

for (UIView *subview in aView.subviews) {
    CGRect frame = subview.frame;
    frame.size.height = 0;
    subview.frame = frame;
}

[UIView commitAnimations];

此外,在折叠后是否有一种重新计算原始大小的方法?
您可能只需要在折叠之前保存高度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接