使用动画在UIViewcontroller.view子视图之间进行更改

时间:2011-12-22 14:59:43

标签: iphone cocoa-touch animation uiview subview

我有一个视图控制器,它包含两个视图(redView,blueView)。视图小于主视图。

我想通过动画从redView更改为blueView。如果使用这个无动画发生。

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                       forView:redView cache:YES]; // !!! I WILL CHANGE THIS

[self.view addSubview:blueView];
[redView removeFromSuperview];

[UIView commitAnimations];

如果我将代码更改为此,那么动画就可以了,但整个mainView动画,我不想发生这种情况。我只想翻转子视图。我应该注意到2个子视图处于相同的位置。 (框架)任何想法?

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                       forView:self.view cache:YES];

[self.view addSubview:blueView];
[redView removeFromSuperview];

[UIView commitAnimations];

3 个答案:

答案 0 :(得分:4)

使用Block动画而不是简单的动画,关于简单动画的苹果“在iOS 4及更高版本中不鼓励使用本节中的方法”

使用Block的动画

[UIView transitionWithView:containerView
                  duration:1.25
                   options:UIViewAnimationOptionTransitionFlipFromRight
                animations:^
{ 

                    [redView removeFromSuperview]; 
                    [containerView  addSubview:blueView];

                }
                completion:NULL];

containerView:是动画的主视图。    还要添加到您的containerView redView,   所有:)     欲了解更多信息,请查看

http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

答案 1 :(得分:0)

在你的第一个例子中,看起来你在动画之前删除了redView,尝试在动画之后删除它。

代码:

[UIView setAnimationDidStopSelector:@selector(removeRedViewFromSuperview)];

答案 2 :(得分:0)

找到解决方案:

我使用tempView为其做动画。在tempView上我添加了view1和view2。

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:tempView cache:YES];
[tempView addSubview:view2]; 
[view1 removeFromSuperview];
[UIView commitAnimations];

额外:为了获得更好的动画,您可以使用view1.visible = YES,NO而不是addSubview,removeFromSuperView,但它们将一直分配