如果您使用的是 iOS 4.0 或更高版本,则以下内容将完全符合您的要求(我只是对其进行了测试以确保)
NewView *myNewView = [[NewView alloc] initWith.....];
[UIView transitionFromView:self.view toView:myNewView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
//[self.navigationController pushViewController:myNewView animated:NO];
[myNewView release];
编辑:我稍微改变了上面的代码(没什么新的,只是注释掉导航控制器,因为这不是必需的)。
所以有几种方法可以解决这个问题(就跟踪下一个视图而言),但这是我能想到的最简单的方法。您已经可以从视图 1 切换到 2,所以我将解释如何从 2 切换到 10(或者您需要的任意多个)。
基本上,视图转换持续的时间太长,viewDidLoad
无法捕捉到进入下一个视图的调用。所以我们需要做的是设置一个定时器,等待并发送一个方法在以后切换。这就是您将在视图 2(以及 3 和 4 等)中看到的代码。
- (void)viewDidLoad {
// this gets called before animation finishes, so wait;
self.navigationController.delegate = self;
// you will need to set the delegate so it can take control of the views to swap them;
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(switchView) userInfo:nil repeats:NO];
}
我只等了 1 秒钟,直到我调用 switch 方法,但如果你在视图中加载了很多,你可能需要再等一会儿。1.5 秒应该绰绰有余,但是您可以尝试一下,看看它在哪里起作用,哪里不起作用。
接下来,您必须在方法中调用下一个视图switchView
。
- (void)switchView {
NextView *myNextView = [[NextView alloc] initWith ... ];
[UIView transitionFromView:self.view toView:nextView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
[nextView release];
}
这对我来说非常有效。为了确保获得新视图,我为每个视图分配了标签,并在每个视图的viewDidLoad
方法中添加了 UILabel 作为子视图,每个视图都显示了其视图的数量。所以希望这是你所需要的。我确信您需要做更复杂的事情,但这将为您提供获得所需外观所需的动画和逻辑。(附带说明,viewDidAppear
执行此操作时似乎没有被调用,因此viewDidLoad
如果您确实需要使用它可能需要手动调用它,否则它工作正常)