您不能使用CATransition在两个视图控制器之间切换,但您可以简单地使用视图控制器的视图并将其与另一个视图控制器的视图切换。
由于iOS 5引入了transitionFromViewController:toViewController:duration:options:animations:completion:
方法,因此使用UIViewControllers更容易。
最后,你仍然会使用UIViewControllers的UIViews。 (实际上,你提供的链接就是你在两个UIViewControllers之间切换的过程,记住,视图控制器只能管理视图,并不是真正的视图,切换不会像dismissModalViewControllerAnimated那么简单:但是有时候定制是不可行的不容易)。
下面是使用所述的iOS 5方法的一个示例:
的UIViewController *控制器= [[UIViewController中的alloc] initWithNibName:无束:无]; [controller.view setBackgroundColor:[UIColor greenColor]];
[self addChildViewController:controller];
[self transitionFromViewController:self.redController toViewController:controller duration:0.8 options:0 animations:^{
CATransition *transition = [CATransition animation];
transition.delegate = self;
transition.duration = 0.8;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
NSString *types[4] = {@"cube", @"rippleEffect", @"cube", @"alignedCube"};
NSString *subtypes[4] = {kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromRight};
transition.type = types[0];
transition.subtype = subtypes[1];
[self.view.layer addAnimation:transition forKey:nil];
} completion:^(BOOL finished) {
[controller didMoveToParentViewController:self];
}];
请注意,您必须事先进行以下操作。
[self addChildViewController:self.redController];
[self.view addSubview:self.redController.view];
在使用这些方法之前,您需要做一些事情。主要区别在于你将拥有比当前更多的视图控制器。这个额外的UIViewController作为其他两个容器(有点像当前,self.view是两个UIViews的容器)。
因此,如果我有两个不同的视图(比如活动源和用户帐户信息),我应该使用一个具有两个视图或两个视图控制器的UIViewcontoller并使用它们的两个UIviews? – TommyG 2012-03-22 19:59:03
这实际上取决于你。一般的提示是,如果它们都是全屏(例如iPhone),那么它们应该是两个不同的UIViewController,但是就编码而言,如果它们共享相同的UIViewController,则更容易。就我个人而言,我会用两个单独的UIViewControllers,因为它们看起来像是分开的。 – 2012-03-22 20:03:12
多数民众赞成好,有道理,但我没有看到我怎么可以使用transitionFromViewController:toViewController:duration:options:动画:完成一个立方体样式转换 – TommyG 2012-03-22 20:43:13