一.头文件

  1. #import <UIKit/UIKit.h>
  2.  
  3. @interface ChaosStatusBarHUD : NSObject
  4. /** 显示成功信息 */
  5. + (void)showSuccess:(NSString *)str;
  6. /** 显示失败信息 */
  7. + (void)showError:(NSString *)str;
  8. /** 显示正在加载的信息 */
  9. + (void)showLoading:(NSString *)str;
  10. /** 隐藏 */
  11. + (void)hide;
  12. /** 显示纯文本 */
  13. + (void)showMessage:(NSString *)str;
  14. /** 自定义图标 文字 */
  15. + (void)showMessage:(NSString *)str withImage:(UIImage *)image;
  16. @end

二.实现.m文件

  1. #import "ChaosStatusBarHUD.h"
  2.  
  3. #define ChaosWindowH 20
  4. #define ChaosScreenW [UIScreen mainScreen].bounds.size.width
  5.  
  6. @implementation ChaosStatusBarHUD
  7.  
  8. static NSTimer *timer_;
  9. static UIWindow *window_;
  10.  
  11. + (void)showWindow
  12. {
  13. // 首先结束之前的定时器
  14. [timer_ invalidate];
  15. UIWindow *window = [[UIWindow alloc] init];
  16. window.backgroundColor = [UIColor blackColor];
  17. window.windowLevel = UIWindowLevelStatusBar;
  18. window.hidden = NO;
  19. window_ = window;
  20. window.frame = CGRectMake(, -ChaosWindowH, ChaosScreenW, ChaosWindowH);
  21.  
  22. // 动画效果
  23. [UIView animateWithDuration:0.25 animations:^{
  24.  
  25. window.frame = CGRectMake(, , ChaosScreenW, ChaosWindowH);
  26. }];
  27. }
  28. /** 自定义图标 文字 */
  29. + (void)showMessage:(NSString *)str withImage:(UIImage *)image
  30. {
  31. // 创建窗体
  32. [self showWindow];
  33. // 添加按钮
  34. UIButton *button = [[UIButton alloc] init];
  35. button.frame = window_.bounds;
  36. [button setImage:image forState:UIControlStateNormal];
  37. [button setTitle:str forState:UIControlStateNormal];
  38. button.titleEdgeInsets = UIEdgeInsetsMake(, , , );
  39. button.titleLabel.font = [UIFont systemFontOfSize:];
  40. [window_ addSubview:button];
  41.  
  42. // 两秒后结束动画
  43. timer_ = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hide) userInfo:nil repeats:NO];
  44. }
  45.  
  46. /** 显示纯文本 */
  47. + (void)showMessage:(NSString *)str
  48. {
  49. [self showMessage:str withImage:nil];
  50. }
  51.  
  52. /** 显示成功信息 */
  53. + (void)showSuccess:(NSString *)str
  54. {
  55. [self showMessage:str withImage:[UIImage imageNamed:@"success"]];
  56. }
  57.  
  58. /** 显示失败信息 */
  59. + (void)showError:(NSString *)str
  60. {
  61. [self showMessage:str withImage:[UIImage imageNamed:@"error"]];
  62. }
  63.  
  64. /** 显示正在加载的信息 */
  65. + (void)showLoading:(NSString *)str
  66. {
  67. // 停止定时器
  68. [timer_ invalidate];
  69. timer_ = nil;
  70. // 创建窗口
  71. [self showWindow];
  72. // 添加按钮
  73. UIButton *button = [[UIButton alloc] init];
  74. button.frame = window_.bounds;
  75. [button setTitle:str forState:UIControlStateNormal];
  76. button.titleLabel.font = [UIFont systemFontOfSize:];
  77. [window_ addSubview:button];
  78. // 计算按钮文字宽度
  79. CGFloat titleWidth = [str sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:]}].width;
  80. // 计算菊花的X值
  81. CGFloat x = (ChaosScreenW - * titleWidth) * 0.5;
  82. // 计算loadingView的Y值
  83. CGFloat y = window_.frame.size.height * 0.5;
  84. UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
  85. [loadingView startAnimating];
  86. [window_ addSubview:loadingView];
  87. loadingView.center = CGPointMake(x, y);
  88. }
  89.  
  90. /** 隐藏 */
  91. + (void)hide
  92. {
  93. // 动画效果
  94. [UIView animateWithDuration:0.25 animations:^{
  95.  
  96. window_.frame = CGRectMake(, -, ChaosScreenW, ChaosWindowH);
  97. } completion:^(BOOL finished) {
  98.  
  99. timer_ = nil;
  100. window_ = nil;
  101. }];
  102. }
  103. @end

iOS不得姐项目--封装状态栏指示器(UIWindow实现)的更多相关文章

  1. iOS不得姐项目--TabBar的重复点击实现当前模块刷新;状态栏点击实现当前模块回滚到最顶部

    一.实现功能:重复点击tabBar,刷新当前TableView,其余不受影响 <1>实现思路: 错误的方法: TabBar成为自己的代理,监听自己的点击--这种方法是不可取的,如果外面设置 ...

  2. iOS不得姐项目--appearance的妙用,再一次设置导航栏返回按钮,导航栏左右按钮的封装(巧用分类)

    一.UI_APPEARANCE_SELECTOR 彩票项目中appearance的用法一直没有搞明白,这次通过第二个项目中老师的讲解,更深一层次的了解到了很多关于appearance的作用以及使用方法 ...

  3. iOS不得姐项目--pop框架的初次使用

    一.pop和Core Animation的区别 1.Core Animation的动画只能添加到layer上 2.pop的动画能添加到任何对象 3.pop的底层并非基于Core Animation,是 ...

  4. iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示

    一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...

  5. iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮

    一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置pla ...

  6. iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)

    一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...

  7. iOS不得姐项目--图片帖子模块,大图默认显示最顶部分的处理

    一.刚开始的处理,设置Mode属性(self.pictureImageView.contentMode = UIViewContentModeScaleAspectFill;) 和 Clip Subv ...

  8. iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍

    UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...

  9. IOS客户端Coding项目记录导航

    IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线  表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...

随机推荐

  1. java utf-8文件处理bom头

    UTF? UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式. 即怎样将Unicode定义的数字转换成程序数据.utf是对Unicode的一种编码格式化 ...

  2. python笔记-调用eval函数出现invalid syntax错误

    本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误.源代码如下 In [2]: eval('a = 1') File "<string>& ...

  3. 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. NOIP2012pj摆花[DP 多重背包方案数]

    题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

  5. NOIP2000进制转换

    题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ...

  6. AC日记——单词倒排 1.7 28

    28:单词倒排 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔. 输 ...

  7. PL/SQL异常处理方法

    PL/SQL异常处理方法   1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: ...

  8. Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  9. 前端见微知著JavaScript基础篇:你所不知道的apply, call 和 bind

    在我的职业生涯中,很早就已经开始使用JavaScript进行项目开发了.但是一直都是把重心放在了后端开发方面,前端方面鲜有涉及.所以造成的一个现象就是:目前的前端知识水平,应付一般的项目已然是足够的, ...

  10. [MetaHook] Event Hook

    #include <metahook.h> struct event_hook_t { event_hook_t *next; char *name; void (*pfnEvent)(e ...