ios - UIApplicationDidBecomeActiveNotification 并设置 RightBarButtonItem :animated:

标签 ios objective-c cocoa-touch uinavigationbar uiapplication

TL;DR 更新:基本上我需要的是延迟我的代码,直到 iOS 完成其“应用程序启动”动画。

我想在我的应用程序激活时为导航栏的内容添加动画效果。在我的 Controller 中,我订阅了 UIApplicationDidBecomeActiveNotification 并使用 setRightBarButtonItem:animated: 来执行更改。

问题是变化没有动画。

我做了一些实验,发现如果我稍等一下 ([NSThread sleepForTimeInterval:.3]),它就会毫无问题地生成动画。

这是一个简单的 View Controller ,演示了该问题:

@interface TESTViewController ()

@property (strong, nonatomic) IBOutlet UINavigationBar *navigationBar;

@end

@implementation TESTViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UINavigationItem *item = [UINavigationItem new];
    UIBarButtonItem *oldItem = [[UIBarButtonItem alloc] initWithTitle:@"Old" style:UIBarButtonItemStyleBordered target:nil action:NULL];
    [item setRightBarButtonItem:oldItem];
    [[self navigationBar] setItems:@[item] animated:NO];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActiveNotificationAction:) name:UIApplicationDidBecomeActiveNotification object:nil];
}

- (void)applicationDidBecomeActiveNotificationAction:(NSNotification *)notification
{
    // [NSThread sleepForTimeInterval:.3];
    UIBarButtonItem *newItem = [[UIBarButtonItem alloc] initWithTitle:@"New" style:UIBarButtonItemStyleBordered target:nil action:NULL];
    [[[self navigationBar] items][0] setRightBarButtonItem:newItem animated:YES];
}

@end

我想找到一个比阻塞线程或在固定延迟后执行更改更好的解决方案。

最佳答案

只需在主队列上使用 dispatch_after 而不是调用
+[NSThread sleepForTimeInterval:] 类方法。

将你的动画作为一个 block 传递,它应该可以完美地工作。

关于ios - UIApplicationDidBecomeActiveNotification 并设置 RightBarButtonItem :animated:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253243/

相关文章:

objective-c - 来自服务器的数据是否也是 MVC 模型的一部分?

ios - 有没有一种方法可以在不导航到 iOS 应用程序之外的情况下通过 Google 对用户进行身份验证?

objective-c - iOS 内存使用变量?

objective-c - 如何将 .hour() 和 .min() 从 Swift 转换为 Objective-C?

ios - 键盘出现时如何滚动 UIScrollView?

ios - 如何在 Cocoa Touch 中切换 View ?

javascript - Facebook 登录设置 : Where is the "Enable Client Access Token Flow" switch?

Objective-C——预期标识符错误

ios - 如何在不知道它是哪个 View 的情况下将 UIView 添加为最顶层 View 的 subview ?

iphone - 有没有办法改变 ipad 上的最小触摸接触直径?