【发布时间】:2014-05-25 04:10:23
【问题描述】:
我正在尝试在 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 中。
【问题讨论】:
-
你真正想要完成什么,实际发生了什么?
-
@matt 我想要用户单击按钮时的水平滑动动画。现在,尽管我有 CATransition 代码,但我没有得到任何动画(新视图仍然显示)。
-
所以这与标签栏控制器无关,对吧?您要问的问题是:用户点击一个按钮,然后您通过从一侧滑动来呈现一个呈现的视图控制器?那是对的吗?您只是想自定义演示过渡动画?
-
@matt 我相信它确实与标签栏控制器有关,因为它在使用两个单层视图控制器时工作正常。在这种情况下,转换代码在
FeedViewController中,FeedViewController被初始化到每个标签栏视图控制器(FirstViewController、SecondViewController等)。这个过程包括将FeedViewController添加为子视图,然后将其移动到父视图控制器。 -
在 iPhone 上,演示文稿始终处于顶层。也许您应该使用自定义容器和 no 呈现(在这种情况下,您完全负责过渡)。
标签: iphone uitabbarcontroller catransition