我为一个视图提供了一个简单易用的“缩放”动画,它以点开头并动画到最大屏幕尺寸:
[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的子视图与其超级视图一起以漂亮的“缩放”方式制作动画?
提前致谢!
/约翰
答案 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)
您始终可以在界面构建器中使用自动调整大小。这样,您可以指定您不想更改的左/边距以及您希望特定子视图调整到的轴。