MBProgressHUD在此按钮触发时淡出/淡化

时间:2014-06-12 21:41:03

标签: ios objective-c mbprogresshud

这里发生了什么?

http://screencast.com/t/WACeaQP00iqb

这是该按钮的代码(三个方法调用spawn 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解雇放在一个KVO回调中,这个回调还没有工作,但首先要做的事情。

2 个答案:

答案 0 :(得分: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];
        }  

});

答案 1 :(得分:0)

在调用更新其他视图元素的方法之前,我最终解除了HUD线。现在它们都发生在瞬间,所以它很好,但如果视图在HUD失效后仍在更新,那将是蹩脚的。因此解决方案是在HUD处于活动状态时不要弄乱视图。一个混乱的解决方案,所以如果有人有一个更好的解决方案,我会全力以赴。