0

私が取り組んでいるプロジェクトでは、2 つのビュー コントローラー間のカスタム トランジションが必要です。次のようにメソッドをオーバーライドして、UIViewControllerTransitioningDelegate をセットアップして実装しました。

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                              animationControllerForOperation:(UINavigationControllerOperation)operation
                                           fromViewController:(UIViewController *)fromVC
                                             toViewController:(UIViewController *)toVC
{
   //Creation of animation
   id<UIViewControllerAnimatedTransitioning> animationController;
   MyAnimator *animator = [[MyAnimator alloc] init];
   animator.appearing = YES;
   animationController = animator;
   return animator
}

そして、メソッドをオーバーライドして UIViewControllerAnimatedTransitioning を正しく実装するように MyAnimator サブクラスをセットアップしました。

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    //custom transition animation
}

このアニメーション遷移をトリガーするために使用するセグエは、次のようにプログラムで作成および呼び出されます。

UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:@"showCardDetail" source:self destination:vc];
[self prepareForSegue:segue sender:self];
[segue perform];

プログラムでセグエを作成する理由: from (からの遷移) と to (への遷移) ビュー コントローラーを別々のストーリーボードに持っています。

問題/質問: 多くの例を見てきましたが、すべて次のようなストーリーボード セグエを使用してカスタム トランジションを処理します。

[self performSegueWithIdentifier:@"storyboardSegue-id" sender:self]

カスタム遷移が行われるように、上記のプログラムで作成されたセグエに対してメソッド-performでどのように定義する必要がありますか。

4

2 に答える 2

0

やろうとしていることを実行するために、カスタム セグエを作成する必要はありません。実際、2 つのコントローラーが別々のストーリーボードにあるため、セグエを使用するべきではありません。宛先ビュー コントローラーをインスタンス化し、pushViewController:animated: を使用して遷移を開始するだけです。最初のビュー コントローラーはナビゲーション コントローラーのデリゲートにする必要があるため、質問の上部に表示されているデリゲート メソッドが呼び出されます。

于 2015-02-27T21:04:20.677 に答える
0

ソースと宛先のviewControllerを調整でき、このnavigationControllerAnimationControllerForOperation:fromViewController:toViewController:タイプに基づいて、目的のアニメーションが表示されます。ここで使用する必要はありませんprepareForSegue:

于 2015-02-28T00:47:52.397 に答える