我的应用程序有一个导航控制器,我不想要任何动画:
在推送视图时阻止动画,通过pushViewController:animated:method
但是当我点击这个子视图中的“后退”按钮时,会有一个动画! KO!我该怎么做才能阻止这个动画?
答案 0 :(得分:4)
这可以防止默认动画。
- (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];
}
答案 1 :(得分:3)
我来找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;
...如果您还希望使用自定义后退动画切入,则需要上面的最后一行,这样您就可以收听导航栏并进行并行反应,如下所示:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
// trigger your custom back animation here
return TRUE;
}
答案 2 :(得分:3)
一个类别更优雅。这假设您在应用程序委托中设置了导航控制器对象。只需将它放在根视图控制器中的@implementaion之前。
#import "AppDelegate.h"
@implementation UINavigationBar (custom)
- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated;
{
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController popViewControllerAnimated:NO];
return TRUE;
}
@end
答案 3 :(得分:2)
不是您应该这样做,但是您可以通过在viewController中创建自定义leftBarButtonItem
来覆盖标准行为。
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];
}
documentation表示您只应在显示导航控件的视图之前传递NO
。
请记住,不符合iPhone接口指南的应用程序将不会被接受到应用商店中。
答案 4 :(得分:0)
我刚刚回答了另一个相关问题,该问题描述了如何easily create a custom back button that replicates the look of the standard iOS (iPhone / iPad) UI back bar button item但允许添加其他功能。根据{{3}}中的建议,在backButtonPressed
方法中,只需添加:
[[self navigationController] popViewControllerAnimated:NO];