0

これに関するフォローアップの質問

私のアプリにはいくつかViewControllersの があるとします。それらを A、B、C、D と呼びましょう。通常、1 ステップ戻る、つまり D -> C から戻るには、NavigationBarまたは行のコードを介して [戻る] ボタンを使用します。

[self.navigationController popViewControllerAnimated:YES];

私がやりたいことは、D -> B からのように、いくつかのステップに戻ることです。

[self.navigationController popToViewController:B animated:YES];

残念ながら、この方法では、どのアニメーションを使用するかを決めることができません。デフォルトのアニメーションの代わりに、フリップ アニメーションを使用する必要があります。

私が見つけたこれを行う唯一の方法は、この方法でした

[self.navigationController transitionFromViewController:self.navigationController.presentedViewController toViewController:B duration:300 options:UIViewAnimationOptionTransitionFlipFromRight animations:nil completion:nil]; 

これがこれを達成する唯一の方法ですか、それともより良い方法を提案できますか?

4

2 に答える 2

1

ナビゲーションスタックからCビューコントローラーを削除して、Dからポップすると、ビューBに直接移動するようにすることができます。

// Remove Controller C from Stack
NSMutableArray *controllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
[controllers removeObject:C];
[self.navigationController setViewControllers:controllers];

次に、必要な[self.navigationController popViewControllerAnimated:YES];アニメーションで使用でき、ビューBにポップバックします。

ビューコントローラをポップするときに実際のフリップアニメーションを実行するには、以下のアニメーションコードを使用できます

[UIView beginAnimations:@"flip_animation" context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:UIViewAnimationOptionTransitionFlipFromTop forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];
于 2012-09-12T09:01:42.647 に答える
0

あなたのコメントからの参照で....

「正しく聞こえますが、フリップアニメーションであるとどこで定義しますか?私が見る限り、これはまだデフォルトのアニメーションを使用しています。– taymless "

アニメーションを実行する必要があるということは、このコードブロックを使用することを意味します。

  -(void)animatefromView:(UIView*)fromView toBlock:(void (^)(void))block // note block may be any executable code...
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration: 1];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:fromView cache:NO];
        block();
        [UIView commitAnimations];

    }

メソッド呼び出しは次のようになります。

[self animatefromView:self.navigationController.view toBlock:^{ 
        [self.navigationController pushViewController:ani animated:NO];
                                                                    }];

これがお役に立てば幸いです...

于 2012-09-12T09:54:21.010 に答える