【问题标题】:UIView beginAnimations with subviews带有子视图的 UIView beginAnimations
【发布时间】:2010-10-26 11:17:05
【问题描述】:

我有一个漂亮而简单的视图“缩放”动画,它以一个点开始并动画到全屏尺寸:

[UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:1.0]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; myView.frame = CGRectMake(0,0,320,480); myView.transform = CGAffineTransformIdentity; [UIView 提交动画];

到目前为止一切顺利:-)

问题是,当我将子视图添加到 myView 时,令我惊讶的是,它们并没有遵循其父视图的动画方案!?!?

顺便说一句。子视图当前像往常一样添加到 MyView 的 initWithFrame 中。我试图将他们的转换属性设置为 CGAffineTransformIdentity 但这没有帮助。

那么,需要做些什么才能让 myView 的子视图与它的父视图一起以漂亮的“缩放”方式进行动画处理?

提前致谢!
/约翰

【问题讨论】:

  • 在主视图中设置转换后是否添加子视图?您是否尝试过隐藏主视图?
  • 是的,我尝试在添加子视图(在 initWithFrame 方法中)之前设置 MainView 的转换属性,但没有帮助。隐藏 MainView 会做什么来帮助解决这个问题?问题是 MainView 的子视图在动画期间滑入,而不是像 MainView 那样放大。

标签: iphone core-animation


【解决方案1】:

我刚遇到同样的问题,解决方案出奇地简单。修改帧大小只影响当前视图,而不影响子视图(如您所见),transform 属性也适用于子视图。

我正在尝试做与您正在做的相反的事情(有一个子视图在显示时看起来“拖放”到现有视图的顶部,而不是从中心缩放)。这段代码对我有用:

self.transform = CGAffineTransformMakeScale(2,2);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.transform = CGAffineTransformMakeScale(1,1);
self.alpha = 1.0;
[UIView commitAnimations];

尝试在开始动画之前将 self.transform 设置为 CGAffineTransformMakeScale(0,0),并在提交之前将其设置回 (1,1)。根本不要修改框架 - 将其保留为动画完成后您希望视图具有的大小。

【讨论】:

  • 我可以确认,如果您明确修改动画中的帧或边界,子视图将不会采用变换(导致看起来很糟糕的缩放)
  • 我知道这篇文章很旧,但我遇到了同样的问题。要获得“缩放”效果,只需制作起始 CGAffineTransformMakeScale(2,2); CGAffineTransformMakeScale(0.1,0.1); CGAffineTransformMakeScale(0,0) 不起作用。
【解决方案2】:

您始终可以在界面生成器中使用自动调整大小。通过这种方式,您可以指定您不想更改的左侧/边距以及您希望特定子视图调整大小的轴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多