1

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 の両方で発生します。

4

1 に答える 1

1

iPhone では、提示されたビュー コントローラーは常にトップ レベルを占めます。presentViewController:...これは、新しいビュー コントローラーのビューがタブ バー コントローラーを置き換えると言う場合を意味します。それが望ましくない場合、つまり、タブ内でトランジション アニメーションを実行したい場合は、を使用せずにビューとトランジションを使用するかpresentViewController:...、View Controller を使用する場合は、次に、ここで行うように、カスタム コンテナー コントローラー (およびトランジション、再び なしpresentViewController) を使用します。

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p316containerController/ch19p631containerController/ViewController.m

一方、タブ バー コントローラー全体を別のビュー コントローラーに置き換えることを目指している場合、iOS と iOS 7 の両方で利用できる方法でその遷移をカスタマイズする方法は、カスタム コンテナー コントローラーを使用することです。究極のルート ビュー コントローラー。移行はあなた次第です。たとえば、これは私が Albumen アプリで行っていることです。これは、順番に並んだ 3 つのナビゲーション コントローラーで構成されます。ボタンをタップすると、次のナビゲーション コントローラーに進みます。明らかに使いたくありませんpresentViewController:それらはすべて互いに積み重なるためです。ナビゲーション コントローラー全体を別のものに置き換えたいと考えています。構造は、今指摘したコードに似ています。Ultimate Controllerのビューは画面全体を占有し、新しい子View Controllerが渡されると、前の子View Controllerのビューから新しい子View Controllerのビューへの遷移を行い、画面全体を占有します(そのサブビューの合計として)独自の見解、わかりません)。

于 2014-05-24T20:10:23.660 に答える