MBProgressHUD不显示

今天写代码时发现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

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 源码来源:gitHub源码 转载于: CocoaChina 来源:南峰子的技术博客 版本:0.9.1 MBPr...
    李小六_阅读 11,503评论 2 5
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,370评论 30 472
  • (转载) MBProgressHUD版本号:0.9.2 以前用MBProgressHUD用得挺好的,基本上 - (...
    隔壁老鹿阅读 5,579评论 0 1
  • 剑花 文/蓝蝶儿 1.旋,转,挑,甩,一朵优雅的剑花 从盈盈身姿里落下帷幕 沿途经历过一些故事 桃色的门扉被轻松叩...
    蓝蝶儿阅读 4,290评论 4 3
  • 1、 细数以前写过的文字,写了很多积极向上的正能量的关于爱情的文章,爱情在我的心里一直都是一个无比美好无比奇妙的字...
    贾香阅读 2,271评论 0 1