私のアプリケーションにはナビゲーション コントローラーがあり、アニメーションは必要ありません。
ビューをプッシュするときにアニメーションを防ぐには、pushViewController:animated: メソッドを使用するのが簡単です
しかし、このサブビューの「戻る」ボタンをクリックすると、アニメーションが表示されます! コ!このアニメーションを防ぐにはどうすればよいですか?
私のアプリケーションにはナビゲーション コントローラーがあり、アニメーションは必要ありません。
ビューをプッシュするときにアニメーションを防ぐには、pushViewController:animated: メソッドを使用するのが簡単です
しかし、このサブビューの「戻る」ボタンをクリックすると、アニメーションが表示されます! コ!このアニメーションを防ぐにはどうすればよいですか?
これにより、デフォルトのアニメーションが妨げられます。
- (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];
}
私はよりエレガントなソリューションを探してSOに来ましたが、これまでに(成功して)どのようにそれを行ってきたかを次に示します。
基本的な考え方:
欠点:
コード - アニメーションを引き継ぐクラス:
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;
}
カテゴリでよりエレガントに。これは、ナビゲーション コントローラー オブジェクトがアプリ デリゲートに設定されていることを前提としています。これをルート ビュー コントローラーの @implementaion の前に置くだけです。
#import "AppDelegate.h"
@implementation UINavigationBar (custom)
- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated;
{
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController popViewControllerAnimated:NO];
return TRUE;
}
@end
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 に受け入れられないことに注意してください。
標準の iOS (iPhone / iPad) UI の戻るバー ボタン項目の外観を複製し、他の機能を追加できるカスタムの戻るボタンを簡単に作成する方法を説明する別の関連する質問に答えました。falconcreek's answerで推奨されているように、backButtonPressed
メソッドに次を追加するだけです:
[[self navigationController] popViewControllerAnimated:NO];