iOS不得姐项目--封装状态栏指示器(UIWindow实现)
一.头文件
- #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实现)的更多相关文章
- iOS不得姐项目--TabBar的重复点击实现当前模块刷新;状态栏点击实现当前模块回滚到最顶部
一.实现功能:重复点击tabBar,刷新当前TableView,其余不受影响 <1>实现思路: 错误的方法: TabBar成为自己的代理,监听自己的点击--这种方法是不可取的,如果外面设置 ...
- iOS不得姐项目--appearance的妙用,再一次设置导航栏返回按钮,导航栏左右按钮的封装(巧用分类)
一.UI_APPEARANCE_SELECTOR 彩票项目中appearance的用法一直没有搞明白,这次通过第二个项目中老师的讲解,更深一层次的了解到了很多关于appearance的作用以及使用方法 ...
- iOS不得姐项目--pop框架的初次使用
一.pop和Core Animation的区别 1.Core Animation的动画只能添加到layer上 2.pop的动画能添加到任何对象 3.pop的底层并非基于Core Animation,是 ...
- iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示
一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...
- iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮
一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置pla ...
- iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...
- iOS不得姐项目--图片帖子模块,大图默认显示最顶部分的处理
一.刚开始的处理,设置Mode属性(self.pictureImageView.contentMode = UIViewContentModeScaleAspectFill;) 和 Clip Subv ...
- iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍
UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...
- IOS客户端Coding项目记录导航
IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线 表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...
随机推荐
- java utf-8文件处理bom头
UTF? UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式. 即怎样将Unicode定义的数字转换成程序数据.utf是对Unicode的一种编码格式化 ...
- python笔记-调用eval函数出现invalid syntax错误
本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误.源代码如下 In [2]: eval('a = 1') File "<string>& ...
- 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- NOIP2012pj摆花[DP 多重背包方案数]
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- NOIP2000进制转换
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ...
- AC日记——单词倒排 1.7 28
28:单词倒排 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔. 输 ...
- PL/SQL异常处理方法
PL/SQL异常处理方法 1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: ...
- Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 前端见微知著JavaScript基础篇:你所不知道的apply, call 和 bind
在我的职业生涯中,很早就已经开始使用JavaScript进行项目开发了.但是一直都是把重心放在了后端开发方面,前端方面鲜有涉及.所以造成的一个现象就是:目前的前端知识水平,应付一般的项目已然是足够的, ...
- [MetaHook] Event Hook
#include <metahook.h> struct event_hook_t { event_hook_t *next; char *name; void (*pfnEvent)(e ...