7

UIViewControllerのtransitionFromViewController:toViewController:durationメソッドを使用しようとしていますが、カスタムアニメーションを使用しています。

次の2つのViewControllerを子としてカスタムコンテナUIViewControllerに追加しました。

  1. firstController-これはUITabBarControllerのインスタンスです
  2. secondController-これはUIViewControllerのサブクラスです

次のコードは期待どおりに機能します。

[self transitionFromViewController:firstController
                  toViewController:secondController 
                          duration:2                                         
                           options:UIViewAnimationOptionTransitionFlipFromLeft  
                        animations:^(void){} 
                        completion:^(BOOL finished){}];

ただし、UINavigationControllersのプッシュメソッドとポップメソッドの動作と同様に、 wherefirstControllerが左にスライドし、右からスライドインに置き換えられるカスタムアニメーションを作成したいと思います。secondControllerに変更した後options、ブロックUIViewAnimationOptionTransitionNoneにカスタムアニメーションを実装しようとしましたが、animationsまったく成功しませんでした。 とアニメーションなしでfirstControllerすぐに交換されます。secondController

助けていただければ幸いです。

ありがとうございました

4

1 に答える 1

15

これは実際にはとても簡単です。何らかの理由で、secondControllerのビューは のビューの下/後ろにあると想定しましたfirstControllerfirstControllerのビューをアニメーション化しようとしただけです。これはもちろん間違っています。transitionFromViewController:toViewController:durationが呼び出されるとすぐに、secondControllerのビューが のビューの上に配置されfirstControllerます。次のコードが機能します。

CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;

secondController.view.frame = CGRectMake(width, 0, width, height);

[self transitionFromViewController:firstController
    toViewController:secondController
    duration:0.4
    options:UIViewAnimationOptionTransitionNone
    animations:^(void) {
        firstController.view.frame = CGRectMake(0 - width, 0, width, height);
        secondController.view.frame = CGRectMake(0, 0, width, height);
    } 
    completion:^(BOOL finished){
        [secondController didMoveToParentViewController:self]; 
    }
];
于 2012-08-19T09:28:14.723 に答える