iOS 动画视图,包括子视图
Posted
技术标签:
【中文标题】iOS 动画视图,包括子视图【英文标题】:iOS animating a view including subviews 【发布时间】:2012-05-15 15:33:12 【问题描述】:我正在尝试制作一个动画来折叠包含一些子视图的视图。
[UIView beginAnimations:@"advancedAnimations" context:nil];
[UIView setAnimationDuration:3.0];
CGRect aFrame = aView.frame;
aView.size.height = 0;
aView.frame = aFrame;
[UIView commitAnimations];
此动画效果很好,但仅适用于 aView。子视图没有按预期折叠。 如何使子视图也折叠?另外,有没有办法在折叠后重新计算原始大小?
谢谢
【问题讨论】:
【参考方案1】:您可能忘记为您的子视图应用一些自动调整大小的掩码。如果你这样做了
for (UIView *subview in aView.subviews)
subview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin);
它应该可以工作。
但是, 正如lamelas所说,我个人会使用
aView.transform = CGAffineTransformMakeScale(1.0,0.0);
【讨论】:
还是不错的,但我想做的是折叠视图,当它变小时隐藏它的内容。 CGAffineTransformMakeScale 缩放整个内容。顺便说一句,你不能在转换中使用 0.0。 您在哪里看到我们不能在转换中使用 0.0 ?无论如何,我不确定您的问题是什么……您希望您的子视图缩放到,还是希望它们在动画发生时被裁剪? 尝试将其设置为 0.0 并查看动画的外观并将其与设置为 0.001 进行比较。我不是要调整子视图的大小,而是要具有“滑动门”效果,因为主视图变小了。 好的,那么您只需将主视图的属性 clipToBounds 设置为 YES 即可。 关于在变换中设置零值(CGAffine + CA3D 的),ios 6+ 似乎让它滑动并适当地动画。 “.001”技巧是实现兼容性的方法。【参考方案2】:尝试使用它来制作动画:
aView.transform = CGAffineTransformMakeScale(1.0,0.0);
【讨论】:
效果更好,但动画有点奇怪 - 试图将视图“挤压”到中间点。【参考方案3】:有根据的猜测:
[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];
另外,有没有办法在折叠后重新计算原始大小?
您可能只想在折叠之前保存高度。
【讨论】:
【参考方案4】:设置autoresizingMask
的Swift 语法与ObjC 略有不同:
for subview in view.subviews
subview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]
【讨论】:
以上是关于iOS 动画视图,包括子视图的主要内容,如果未能解决你的问题,请参考以下文章