5

我在扩展 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 索引和 currentView 索引),但这不起作用,因为每个自定义视图类都有它自己的实例并且这些变量不共享。

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

谢谢!

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

4

4 回答 4

5

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

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

于 2008-10-26T23:02:35.230 回答
2

如果您有指向要在它们之间切换的视图的指针,只需在“from”视图上调用 -removeFromSuperview 并在 superview 上调用 -addSubview:(“to”视图)。转换不依赖于任何特定的方法调用;或多或少任何形式的“交换两个视图”方法都将被适当地动画化。

于 2008-10-26T21:49:21.290 回答
1

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

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

于 2012-03-04T17:45:18.797 回答
0

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

于 2008-10-26T21:35:47.247 回答