如何在两个以上的UIViews之间进行翻转动画?

时间:2008-10-26 21:25:39

标签: iphone objective-c cocoa-touch

我在扩展UIView的类中有动画代码:

// Start Animation Block
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:[self superview] cache:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];

//int nextView = currentView + 1;
// Animations
[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//And so I would do: [[self superview exchangeSubviewAtIndex:currentView withSubviewAtIndex:nextView];
//Doesn't work because curentView is not global... with each instance of a class it's reset to what it's instanciated to. 
//currentView++;

// Commit Animation Block
[UIView commitAnimations];

此动画代码适用于两个视图。但我试图为许多观点做这件事。我尝试添加一个全局变量(nextview index和currentView索引),但这不起作用,因为每个自定义视图类都有自己的实例,并且不共享这些变量。

有谁知道我怎么能完成我想做的事情?

谢谢!

编辑:如果我可以使用[自我超级视图]访问当前视图和下一个视图的索引,我将能够这样做。有没有一些方法可以做到这一点?

4 个答案:

答案 0 :(得分:5)

Apple有关于视图转换here的非常好的教程。除了实现它们的方式之外,您还可以查看使用UINavigationController来管理一堆视图并在它们之间进行转换。

基本上你需要管理超级视图而不是视图中的转换 - 超级视图可以知道它当前显示的是谁以及下一个是谁。

答案 1 :(得分:2)

如果您有指向要尝试切换的视图的指针,只需在“from”视图上调用-removeFromSuperview,并在superview上调用-addSubview :(“to”视图)。转换不依赖于任何特定的方法调用;或多或少任何形式的“交换两种观点”方法都将得到适当的动画。

答案 2 :(得分:1)

对于那些发现此问题的人谁支持iOS 4.0及更高版本,Apple已为此任务提供了内置API:

请参阅:transitionFromView:toView:duration:options:completion:

答案 3 :(得分:0)

我认为链接的视图列表可能是您应该考虑实施的。