简介:

  在开发应用的时候,为了更好的增加用户的体验,常常在客户端向服务端请求数据的时候,在适当的地方加上非模态HUD,让用户可以可以知道当前的进度,稍作等待。

  

MBProgressHUD 第三方框架Github地址

#import "AppDelegate+HUD.h"
#import "MBProgressHUD.h" @implementation AppDelegate (HUD) // 获取当前处于activity状态的view controller (常用于收到异地登录,退出登录的弹窗)
- (UIViewController *)activityViewController
{
UIViewController* activityViewController = nil; UIWindow *window = [[UIApplication sharedApplication] keyWindow]; // 如果是模态控制器用这个方法获取
UIViewController *appRootVC = window.rootViewController;
UIViewController *topVC = appRootVC;
if (topVC.presentedViewController) {
topVC = topVC.presentedViewController;
return topVC;
} if(window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *tmpWin in windows)
{
if(tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
} NSArray *viewsArray = [window subviews];
if([viewsArray count] > )
{
UIView *frontView = [viewsArray objectAtIndex:]; id nextResponder = [frontView nextResponder]; if([nextResponder isKindOfClass:[UIViewController class]])
{
activityViewController = nextResponder;
}
else
{
activityViewController = window.rootViewController;
}
} return activityViewController;
} /**
* 因为网络请求是在异步线程中执行,只有主线程才可以更新UI
*/
// 显示加载
- (void) showHUD:(NSString *)msg
{
dispatch_async(dispatch_get_main_queue(), ^{
if ([self.window viewWithTag:]) {
[[self.window viewWithTag:] removeFromSuperview];
}
MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.window];
HUD.tag = ;
[self.window addSubview:HUD];
HUD.label.text = msg;
HUD.contentColor = [UIColor blackColor];
HUD.label.textColor = [UIColor colorWithRed:254.0/ green:71.0/ blue:67.0/ alpha:];
[HUD setUserInteractionEnabled:NO]; // 设置成非模态显示
[HUD showAnimated:YES];
}); } // 移除
- (void) removeHUD
{
dispatch_async(dispatch_get_main_queue(), ^{
[[self.window viewWithTag:] hideAnimated:YES];
[[self.window viewWithTag:] removeFromSuperViewOnHide];
}); } // 显示信息
- (void) showMessage:(NSString *) msg
{ dispatch_async(dispatch_get_main_queue(), ^{
[[self.window viewWithTag:] hideAnimated:YES];
[[self.window viewWithTag:] removeFromSuperViewOnHide]; MBProgressHUD *HUDText = [MBProgressHUD showHUDAddedTo:self.window animated:YES];
// 设置只是显示文本
HUDText.tag = ;
HUDText.mode = MBProgressHUDModeText;
HUDText.label.text = msg;
HUDText.margin = 10.0f;
// CGPoint currentOffset = HUDText.offset;
// currentOffset.y = -[UIScreen mainScreen].bounds.size.height / 2 + 80; // 设置Y的起始位置
// HUDText.offset = currentOffset;
HUDText.removeFromSuperViewOnHide = YES;
[HUDText setUserInteractionEnabled:NO];
[HUDText hideAnimated:YES afterDelay:2.8];
});
}

第十六篇、MBprogressHUD的使用和获取当前的控制器的更多相关文章

  1. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

    解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...

  2. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  3. 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint

    目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...

  4. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)

    第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...

  5. Python自动化 【第十六篇】:JavaScript作用域和Dom收尾

    本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...

  6. Struts2(十六篇)

    (一)Struts2框架概述 (二)Struts2配置文件 (三)Struts2的Action(简单讲解版) (四)Struts2的Action(深入讲解版) (五)Struts2处理结果管理 (六) ...

  7. Python之路(第三十六篇)并发编程:进程、同步异步、阻塞非阻塞

    一.理论基础 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. 即使可以利用的cpu只有一个(早期的 ...

  8. Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)

    一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...

  9. [Python笔记]第十六篇:web框架之Tornado

    Tornado是一个基于python的web框架,xxxxx 安装 python -m pip install tornado 第一个Tornado程序 安装完毕我们就可以新建一个app.py文件,放 ...

随机推荐

  1. runtime详解2

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  2. 【C++深入浅出】设计模式学习之观察者模式

    前言 前两天学习了weak_ptr以后还是不甚明了,一则需要实际应用去锤炼,二来就是不懂观察者模式. 正文 观察者模式又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对 ...

  3. mybatis-generator-core自动生成do、mapping、dao 代码

    使用mybatis配置映射文件,有点麻烦,容易出错,可以使用jar工具自动生成代码,即高效又方便 一.下载两个jar,并放置在G:\tool\maven\generator目录下(自己定义) myba ...

  4. Genymotion与本地电脑共享文件夹的方法

    首先打开vbox的界面,左侧列表应该可以看到Genymotion添加的虚拟机,如图:对要设置的虚拟机单击右键,在弹出的菜单中点击“设置...”,弹出设置页面后点击左侧最后一个标签“共享文件夹”,点击右 ...

  5. JS保留两位小数 四舍五入函数

    js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数. <script language="javascript"> document.write(& ...

  6. git克隆远程项目分支到本地对应分支

    最近公司改用git了,研究了一下如何把远程的代码克隆到本地. 1. 配置对应信息 git config --global user.name git config --global user.emai ...

  7. 从Eclipse到Android Studio经历

    现在不得不要和相处近两年的Eclipse分手了,很舍不得,谢谢你这些日子有你的陪伴,每天都会有些的期待和挑战.两年来,我们建立了很深厚的情感.曾经以为我的世界只能有你,而现在我的心里可能有了别人.起初 ...

  8. 在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等 .

    笔者不知道该用哪个词来形容ValueStack.ActionContext等可以在Struts2中用来存放数据的类.这些类使用的范围不同,得到的方法也不同,下面就来一一介绍. 声明:本文参考Strut ...

  9. mha日常维护命令

    mha日常维护命令 http://m.blog.chinaunix.net/uid-28437434-id-3959021.html?/13033.shtml 1.查看ssh登陆是否成功masterh ...

  10. VM11安装Mac OS X 10.10

    工具/原料 1. VMware Workstation 11.12 2. unlocker 206(for OS X 插件补丁) 3. Mac OS X 10.10镜像 方法/步骤   有图有真相,哈 ...