【问题标题】:iOS: UIActivityIndicator in navigation bar not stoppingiOS:导航栏中的 UIActivityIndi​​cator 没有停止
【发布时间】:2014-07-25 08:30:30
【问题描述】:

我写了一个小测试应用程序,它不起作用。这是我的故事板:
(来源:cs618122.vk.me

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIActivityIndicatorView* ai = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    UIBarButtonItem* rightButton = [[UIBarButtonItem alloc] initWithCustomView:ai];
    self.navigationItem.rightBarButtonItem = rightButton;
    [ai startAnimating];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        [NSThread sleepForTimeInterval: 5];
        NSLog(@"STOP!");
        [ai stopAnimating];
    });
}

这是工作结果:
(来源:cs618122.vk.me

怎么了?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: ios grand-central-dispatch nsthread uiactivityindicatorview


【解决方案1】:

这里解决了同样的问题:

[spinner startAnimating];
dispatch_async(kBgQueue, ^{
    // ... do other stuff in the background
    dispatch_async(dispatch_get_main_queue(), ^{
        [spinner stopAnimating];
   });
}); 

UIActivityIndicatorView won't stop

【讨论】:

    【解决方案2】:

    你试过了吗?

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [ai stopAnimating];
    });
    

    【讨论】:

      【解决方案3】:

      所有用户界面更新必须在主线程(mainQueue)上运行:

       [[NSOperationQueue mainQueue] addOperationWithBlock:^ {
              [ai stopAnimating];
          }];
      

      【讨论】:

      • 虽然这可以解决问题,但您无需解释原因或处理原始延迟...
      【解决方案4】:

      所有 UI 更新都必须在主线程上运行,并且您在后台线程上运行 stop。

      另外,不要启动后台线程然后将其休眠。使用不同的 API 来运行您的延迟函数,例如计时器或 dispatch_after(您可以将其添加到主队列并解决这两个问题)。

      【讨论】:

      • 为什么人们不喜欢这个答案,而其他人却投票赞成,他们只是想要准确的输出(代码),而这提供了其他人写的所有信息以编码方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多