一.头文件

 #import <UIKit/UIKit.h>

 @interface ChaosStatusBarHUD : NSObject
/** 显示成功信息 */
+ (void)showSuccess:(NSString *)str;
/** 显示失败信息 */
+ (void)showError:(NSString *)str;
/** 显示正在加载的信息 */
+ (void)showLoading:(NSString *)str;
/** 隐藏 */
+ (void)hide;
/** 显示纯文本 */
+ (void)showMessage:(NSString *)str;
/** 自定义图标 文字 */
+ (void)showMessage:(NSString *)str withImage:(UIImage *)image;
@end

二.实现.m文件

 #import "ChaosStatusBarHUD.h"

 #define ChaosWindowH 20
#define ChaosScreenW [UIScreen mainScreen].bounds.size.width @implementation ChaosStatusBarHUD static NSTimer *timer_;
static UIWindow *window_; + (void)showWindow
{
// 首先结束之前的定时器
[timer_ invalidate];
UIWindow *window = [[UIWindow alloc] init];
window.backgroundColor = [UIColor blackColor];
window.windowLevel = UIWindowLevelStatusBar;
window.hidden = NO;
window_ = window;
window.frame = CGRectMake(, -ChaosWindowH, ChaosScreenW, ChaosWindowH); // 动画效果
[UIView animateWithDuration:0.25 animations:^{ window.frame = CGRectMake(, , ChaosScreenW, ChaosWindowH);
}];
}
/** 自定义图标 文字 */
+ (void)showMessage:(NSString *)str withImage:(UIImage *)image
{
// 创建窗体
[self showWindow];
// 添加按钮
UIButton *button = [[UIButton alloc] init];
button.frame = window_.bounds;
[button setImage:image forState:UIControlStateNormal];
[button setTitle:str forState:UIControlStateNormal];
button.titleEdgeInsets = UIEdgeInsetsMake(, , , );
button.titleLabel.font = [UIFont systemFontOfSize:];
[window_ addSubview:button]; // 两秒后结束动画
timer_ = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hide) userInfo:nil repeats:NO];
} /** 显示纯文本 */
+ (void)showMessage:(NSString *)str
{
[self showMessage:str withImage:nil];
} /** 显示成功信息 */
+ (void)showSuccess:(NSString *)str
{
[self showMessage:str withImage:[UIImage imageNamed:@"success"]];
} /** 显示失败信息 */
+ (void)showError:(NSString *)str
{
[self showMessage:str withImage:[UIImage imageNamed:@"error"]];
} /** 显示正在加载的信息 */
+ (void)showLoading:(NSString *)str
{
// 停止定时器
[timer_ invalidate];
timer_ = nil;
// 创建窗口
[self showWindow];
// 添加按钮
UIButton *button = [[UIButton alloc] init];
button.frame = window_.bounds;
[button setTitle:str forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:];
[window_ addSubview:button];
// 计算按钮文字宽度
CGFloat titleWidth = [str sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:]}].width;
// 计算菊花的X值
CGFloat x = (ChaosScreenW - * titleWidth) * 0.5;
// 计算loadingView的Y值
CGFloat y = window_.frame.size.height * 0.5;
UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[loadingView startAnimating];
[window_ addSubview:loadingView];
loadingView.center = CGPointMake(x, y);
} /** 隐藏 */
+ (void)hide
{
// 动画效果
[UIView animateWithDuration:0.25 animations:^{ window_.frame = CGRectMake(, -, ChaosScreenW, ChaosWindowH);
} completion:^(BOOL finished) { timer_ = nil;
window_ = nil;
}];
}
@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. 第一篇使用Markdown的文章

    一级标题 1 计算机 |计算机|科学| Foo 这段文字需要被强调 this is H1 ========== this is H2 ---------- 这是H1 这是H2 这是H3 这是H6 断好 ...

  2. 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用

    --------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...

  3. Strcmp(字符串1,字符串2)函数 Sizeof && strlen() Substr(a,b)

    Strcmp(字符串1,字符串2)函数 { strcmp函数是比较两个字符串的大小,返回比较的结果.一般形式是:  i=strcmp(字符串,字符串); 其中,字符串1.字符串2均可为字符串常量或变量 ...

  4. VS 的编译选项 build下的 platform target -- Any CPU和x86有什么影响?

    VS 的编译选项 build下的platform -- Any CPU和x86有什么影响? 现在的问题是,我的一个assembly用Any CPU编译就不能在64位系统下运行了,但是用x86编译就ok ...

  5. REST架构

    网络上的所有事物都被抽象为资源(resource): 每个资源对应一个唯一的资源标识符(resource identifier): 通过通用的连接器接口(generic connector inter ...

  6. 【程序员技术练级】熟悉Unix/Linux Shell和常见的命令行(一)文件系统结构和基本操作

    作为程序猿,熟悉一些unix/linux命令行是非常必要的,因为部署服务的服务器现在基本上用的都是unix/linux系统,很少在windows上部署服务的. 今天我们就介绍一些在linux上的文件系 ...

  7. maven-安装配置

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. maven是什么maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行” ...

  8. [No00001F]阅读速度如何快一点、再快一点?-不知道读啥?试试这些电影剧本!

    少侠萌好,还记得包大人给大家推荐过的语感培养大法——“电影剧本阅读法”吗?最近,包大人陆陆续续收到了好几位少侠的实践报告,他们中不少人抱怨:“大人,你明明说过电影剧本篇幅短.用词简单的,可为什么我还是 ...

  9. DataConvertJson

    public class DataConvertJson { #region dataTable转换成Json格式 /// <summary> /// dataTable转换成Json格式 ...

  10. 运用.net core配合VS 2015制作nuget包

    from:http://www.cnblogs.com/zeusro/p/5171084.html 运用.net core配合VS 2015制作nuget包 以往做nuget包我们一般要么用命令行,要 ...