zoukankan      html  css  js  c++  java
  • iOS不得姐项目--封装状态栏指示器(UIWindow实现)

    一.头文件

     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 
     12 + (void)showWindow
     13 {
     14     // 首先结束之前的定时器
     15     [timer_ invalidate];
     16     UIWindow *window = [[UIWindow alloc] init];
     17     window.backgroundColor = [UIColor blackColor];
     18     window.windowLevel = UIWindowLevelStatusBar;
     19     window.hidden = NO;
     20     window_ = window;
     21     window.frame = CGRectMake(0, -ChaosWindowH, ChaosScreenW, ChaosWindowH);
     22     
     23     // 动画效果
     24     [UIView animateWithDuration:0.25 animations:^{
     25         
     26         window.frame = CGRectMake(0, 0, ChaosScreenW, ChaosWindowH);
     27     }];
     28 }
     29 /** 自定义图标 文字 */
     30 + (void)showMessage:(NSString *)str withImage:(UIImage *)image
     31 {
     32     // 创建窗体
     33     [self showWindow];
     34     // 添加按钮
     35     UIButton *button = [[UIButton alloc] init];
     36     button.frame = window_.bounds;
     37     [button setImage:image forState:UIControlStateNormal];
     38     [button setTitle:str forState:UIControlStateNormal];
     39     button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
     40     button.titleLabel.font = [UIFont systemFontOfSize:13];
     41     [window_ addSubview:button];
     42     
     43     // 两秒后结束动画
     44     timer_ = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hide) userInfo:nil repeats:NO];
     45 }
     46 
     47 /** 显示纯文本 */
     48 + (void)showMessage:(NSString *)str
     49 {
     50     [self showMessage:str withImage:nil];
     51 }
     52 
     53 /** 显示成功信息 */
     54 + (void)showSuccess:(NSString *)str
     55 {
     56     [self showMessage:str withImage:[UIImage imageNamed:@"success"]];
     57 }
     58 
     59 /** 显示失败信息 */
     60 + (void)showError:(NSString *)str
     61 {
     62     [self showMessage:str withImage:[UIImage imageNamed:@"error"]];
     63 }
     64 
     65 /** 显示正在加载的信息 */
     66 + (void)showLoading:(NSString *)str
     67 {
     68     // 停止定时器
     69     [timer_ invalidate];
     70     timer_ = nil;
     71     // 创建窗口
     72     [self showWindow];
     73     // 添加按钮
     74     UIButton *button = [[UIButton alloc] init];
     75     button.frame = window_.bounds;
     76     [button setTitle:str forState:UIControlStateNormal];
     77     button.titleLabel.font = [UIFont systemFontOfSize:13];
     78     [window_ addSubview:button];
     79     // 计算按钮文字宽度
     80     CGFloat titleWidth = [str sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:13]}].width;
     81     // 计算菊花的X值
     82     CGFloat x = (ChaosScreenW - 2 * titleWidth) * 0.5;
     83     // 计算loadingView的Y值
     84     CGFloat y = window_.frame.size.height * 0.5;
     85     UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
     86     [loadingView startAnimating];
     87     [window_ addSubview:loadingView];
     88     loadingView.center = CGPointMake(x, y);
     89 }
     90 
     91 /** 隐藏 */
     92 + (void)hide
     93 {
     94     // 动画效果
     95     [UIView animateWithDuration:0.25 animations:^{
     96         
     97         window_.frame = CGRectMake(0, -20, ChaosScreenW, ChaosWindowH);
     98     } completion:^(BOOL finished) {
     99         
    100         timer_ = nil;
    101         window_ = nil;
    102     }];
    103 }
    104 @end
  • 相关阅读:
    当Table中td内容为空时,让它显示边框的办法
    超链接可以是JS代码
    学习Filter
    关于SQL语句的拼接问题
    复习JSP时遇到的几个问题
    凡是项目中的增删改都要加事务
    Xshell和SecureCRT连不上VMware虚拟机linux系统
    IBM AIX定义数组变量
    Python模块之re 正则表达式
    Python模块之itertools 用于创建和使用迭代器的函数工具
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5524225.html
Copyright © 2011-2022 走看看