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

4 回答 4

5

您可能忘记对子视图应用一些自动调整大小的掩码。如果你这样做

for (UIView *subview in aView.subviews) {
    subview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin);
}

它应该工作。

但是,正如lamelas所说,我个人会使用

aView.transform = CGAffineTransformMakeScale(1.0,0.0);
于 2012-05-15T16:06:38.577 回答
4

尝试使用它来制作动画:

aView.transform = CGAffineTransformMakeScale(1.0,0.0);
于 2012-05-15T15:40:12.190 回答
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];

此外,有没有办法在折叠后重新计算原始大小?

您可能只想在折叠之前保存高度。

于 2012-05-15T15:42:13.840 回答
0

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

for subview in view.subviews {
    subview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]
}
于 2022-02-10T03:21:54.913 回答