18

私のアプリケーションにはナビゲーション コントローラーがあり、アニメーションは必要ありません。

  • ビューをプッシュするときにアニメーションを防ぐには、pushViewController:animated: メソッドを使用するのが簡単です

  • しかし、このサブビューの「戻る」ボタンをクリックすると、アニメーションが表示されます! コ!このアニメーションを防ぐにはどうすればよいですか?

4

5 に答える 5

8

これにより、デフォルトのアニメーションが妨げられます。

- (void)viewWillDisappear:(BOOL)animated {
    [UIView setAnimationsEnabled: NO];
}

- (void)viewDidDisappear:(BOOL)animated {
    [UIView setAnimationsEnabled: YES];
}

カスタムアニメーションが必要な場合

- (void)viewWillDisappear:(BOOL)animated {
    [UIView setAnimationsEnabled: NO];

    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.type = kCATransitionFade;
    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
}

- (void)viewDidDisappear:(BOOL)animated {
    [UIView setAnimationsEnabled: YES];
}
于 2016-06-17T13:51:56.990 に答える
3

私はよりエレガントなソリューションを探してSOに来ましたが、これまでに(成功して)どのようにそれを行ってきたかを次に示します。

基本的な考え方:

  1. UINavigationController を使用しないでください。代わりに、それを構成する部分 (UINavigationBar など) を使用して、自分で作業を行ってください。
  2. ナビゲーション バーをトリガーして、独自のカスタム アニメーションと並行してアニメーション化します (または、アニメーションがまったく必要ない場合)。

欠点:

  1. UINavigationController は、メモリのロード/アンロードなど、その他の処理を自動的に処理します。また、すべての UIViewController に「ハード コード」されています。それらは常に、それらを含む UINavigationController への参照を持っています。Apple がカスタム アニメーションを設定するためのフックを提供していないという理由だけで、これらすべてを破棄するのは残念です。

コード - アニメーションを引き継ぐクラス:

UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
// next line only needed if you want a custom back anim too
navigationController.navigationBar.delegate = self;

...カスタム バック アニメーションをカットインしたい場合は、上記の最後の行が必要です。これにより、navbar をリッスンし、次のように並行して反応できるようになります。

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    // trigger your custom back animation here

    return TRUE;
}
于 2010-06-27T16:07:38.337 に答える
3

カテゴリでよりエレガントに。これは、ナビゲーション コントローラー オブジェクトがアプリ デリゲートに設定されていることを前提としています。これをルート ビュー コントローラーの @implementaion の前に置くだけです。

#import "AppDelegate.h"

@implementation UINavigationBar (custom)
- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated;
{

    AppDelegate *delegate = [[UIApplication sharedApplication] delegate];

    [delegate.navController popViewControllerAnimated:NO];

    return TRUE;
}


@end
于 2011-05-12T22:26:21.533 に答える
2

leftBarButtonItemそうすべきではありませんが、viewControllerでカスタムを作成することにより、標準の動作をオーバーライドできます。

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
[[self navigationItem] setLeftBarButtonItem:item];
[item release];

- (void)backButtonPressed
{
    [[self navigationContoller] popViewControllerAnimated:NO];
}

ドキュメントには、ナビゲーション コントローラーのビューが表示されるNO にのみ通過する必要があると記載されています。

iPhone インターフェイス ガイドラインに準拠していないアプリケーションは、App Store に受け入れられないことに注意してください。

于 2010-06-25T18:11:35.763 に答える
0

標準の iOS (iPhone / iPad) UI の戻るバー ボタン項目の外観を複製し、他の機能を追加できるカスタムの戻るボタンを簡単に作成する方法を説明する別の関連する質問に答えました。falconcreek's answerで推奨されているように、backButtonPressedメソッドに次を追加するだけです:

[[self navigationController] popViewControllerAnimated:NO];
于 2012-08-30T13:52:41.953 に答える