我正在尝试在 UITabBarController 中实现 CATransition。现在,我有一个名为FeedViewController
. UITabBarController 中的每个选项卡都是此类的一个实例。在每个选项卡视图控制器(FirstViewController
,SecondViewController
等)中,我都有以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
FeedViewController *feedViewController = [[FeedViewController alloc] initWithNibName:@"FeedViewController" bundle:nil];
[self addChildViewController: feedViewController];
feedViewController.view.frame = CGRectMake(0,0,320,self.view.frame.size.height);
[self.view addSubview: feedViewController.view];
[feedViewController didMoveToParentViewController: self];
}
现在FeedViewController
我有一个 IBAction,它提供了一个新的视图控制器。这是代码:
-(IBAction)goHome {
HomeViewController *home = [[HomeViewController alloc] initWithNibName:nil bundle:nil];
CATransition *animation = [CATransition animation];
[animation setDuration:0.3];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromLeft];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[self.view.superview layer] addAnimation:animation forKey:@"SwitchToView"];
[self presentViewController:home animated:NO completion:nil];
}
我之前在我的应用程序的其他部分使用过完全相同的 CATransition 代码,它在那里工作正常。但是,在这种情况下,在呈现新视图时没有动画。我相信问题出在我添加动画的图层上。具体来说,我认为我需要[self.view.superview layer]
用其他东西替换,但我不知道是什么。
非常感谢您的帮助。
更新:
如果我在上面的代码中更改为animated:NO
,animated:YES
CATransition 确实可以工作(但与默认的向上滑动动画同时发生)。这发生在 iOS 6 和 iOS 7 中。