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
上記のコードでtoを変更するとanimated:YES
、CATransition は機能します (ただし、デフォルトのスライド アップ アニメーションと同時に発生します)。これは、iOS 6 と iOS 7 の両方で発生します。