2014-06-12 8 views
0

这里发生了什么?MBProgressHUD在被此按钮触发时变淡/变亮

http://screencast.com/t/WACeaQP00iqb

下面是该按钮的代码(这三个方法调用产卵3(是3,我没有写服务器:d)需要一些时间来完成异步数据的任务):

- (IBAction)didTouchClockButton:(id)sender { 
[self.dr isUserClockedIn]; 

hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
hud.dimBackground = NO; 

// hail mary 
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]]; 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    // Do something... 
    if (![self.dr isNetworkDead]) 
     if ([self.dr isUserClockedIn]) { // add clock in/clock out function to this button 
      hud.labelText = @"Clocking Out.."; 
      [self.dr clockOut]; 
     } else { 
      hud.labelText = @"Clocking In.."; 
      [self.dr clockIn]; 
     } 

}); 

}

我把HUD解雇一个志愿回调,这是没有工作,但第一件事情里面第一。

回答

0

我结束了在我调用更新其他视图元素的方法之前关闭HUD的行。现在它们都是瞬间发生的,所以没关系,尽管如果在HUD发生故障后视图仍然在更新,那将是蹩脚的。因此,解决方案是在HUD处于活动状态时不要弄乱视图。一个混乱的解决方案,所以如果任何人有更好的一个我都耳朵。

0

您不想在后台线程上执行与UI相关的任何操作。在主线程上派发MBProgressHUD代码,看看是否解决了这个问题。尝试:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    // Do something... 
    if (![self.dr isNetworkDead]) 
     if ([self.dr isUserClockedIn]) { // add clock in/clock out function to this button 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       hud.labelText = @"Clocking Out.."; 
      }); 
      [self.dr clockOut]; 
     } else { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       hud.labelText = @"Clocking Out.."; 
      }); 
      [self.dr clockIn]; 
     } 

}); 
+0

我认为这也是标签,但我早先评论说,它仍然消失。 – neptune

+1

是否有任何其他代码(可能在clockIn/clockOut方法中)可能会在顶部添加视图或其他东西? – Mike

+0

上帝,我的意思是,迈克,你是正确的一个观点参与。这些时钟方法触发KVO回调,将标签文本和顶部的图形交换。所以我想在更新另一个视图元素时不能运行MBProgressHUD? HM .. – neptune