UIView使用子视图开始动画

时间:2009-05-15 11:20:50

标签: iphone core-animation

我为一个视图提供了一个简单易用的“缩放”动画,它以点开头并动画到最大屏幕尺寸:

        [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 commitAnimations];

到目前为止很好:-)

问题在于,当我向myView添加子视图时,令我惊讶的是,他们没有遵循他们的superview的动画方案!?!?

顺便说一下。子视图目前在MyView的initWithFrame中照常添加。我尝试将它们的转换属性设置为CGAffineTransformIdentity,但它没有帮助。

那么,需要做些什么才能让myView的子视图与其超级视图一起以漂亮的“缩放”方式制作动画?

提前致谢!
/约翰

2 个答案:

答案 0 :(得分:15)

我刚遇到同样的问题,解决方案非常简单。修改帧大小只影响当前视图,而不影响子视图(如您所注意到的),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)。根本不要修改框架 - 在动画完成后将其保留为视图所需的大小。

答案 1 :(得分:0)

您始终可以在界面构建器中使用自动调整大小。这样,您可以指定您不想更改的左/边距以及您希望特定子视图调整到的轴。

Autosizing feature