MBProgressHUD不显示

2018-01-25  本文已影响0人  昵称2017

今天写代码时发现hud没有显示出来,把耗时操作注释掉就可以显示出来,找到资料说出现原因是:UIKit 不能在当前run loop结束前重画,即需要在下一个run loop 周期才能重画,更新UI。

在这里记录一下方便以后查看:

出现问题情况:如下例子中,要等到for循环结束后才能显示出来。

- (IBAction)showTextOnly:(id)sender {

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];

    hud.mode = MBProgressHUDModeText;

    hud.labelText = @"Some message...";

    hud.margin = 10.f;

    hud.removeFromSuperViewOnHide = YES;

    for (int i=0; i<5; i++) {

        sleep(1);

    }

}

解决方案:

1.在下面方法运行你的耗时程序,然后在myTadk结束时隐藏 HUD

[self performSelector:@selector(myTask) withObject:nil afterDelay:0.001];

2.可以手动运行 run loop

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];

3.使用blocks

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){

// Insert myTask code here

});

上一篇 下一篇

猜你喜欢

热点阅读