zoukankan      html  css  js  c++  java
  • LGLProgressHUD

    不想用第三方的指示器,感觉有点大,自己写了一个简单的活动指示器,目前只有两种效果。效果如图

    第一种:

    第二种

    第二种可以随着提示文字的增多而变长

    LGLProgressHUD.h

    //
    //  LGLProgressHUD.h
    //  LGLProgress
    //
    //  Created by 李国良 on 2016/10/8.
    //  Copyright © 2016年 李国良. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface LGLProgressHUD : NSObject
    
    + (instancetype)shareProgressHUD;
    
    - (void)showProgress;
    - (void)showProgressWithMessage:(NSString *)message;
    - (void)stopProgress;
    @end

    LGLProgressHUD.m

    //
    //  LGLProgressHUD.m
    //  LGLProgress
    //
    //  Created by 李国良 on 2016/10/8.
    //  Copyright © 2016年 李国良. All rights reserved.
    /*  菊花样式的修改
     typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) {
     UIActivityIndicatorViewStyleWhiteLarge,
     UIActivityIndicatorViewStyleWhite,
     UIActivityIndicatorViewStyleGray,
     };
     
     */
    
    #import "LGLProgressHUD.h"
    
    #define WIDTH [UIScreen mainScreen].bounds.size.width
    #define HEIGHT [UIScreen mainScreen].bounds.size.height
    #define BACKGROUNDCOLOR [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3]
    #define TEXTFONT(a)  [UIFont systemFontOfSize:a]
    
    @interface LGLProgressHUD ()
    
    {
        UIView * _alertView;
        UIActivityIndicatorView * _activity;
        UILabel * _alertText;
    }
    
    @end
    
    @implementation LGLProgressHUD
    
    static id _instace;
    
    + (instancetype)shareProgressHUD
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{// 只创建一次
            _instace = [[self alloc] init];
        });
        return _instace;
    }
    
    + (id)allocWithZone:(struct _NSZone *)zone
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{// 只初始化一次
            _instace = [super allocWithZone:zone];
        });
        return _instace;
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return _instace;
    }
    
    
    - (void)showProgress {
       
        if (!_alertView) {
             UIWindow *window = [UIApplication sharedApplication].keyWindow;
            _alertView = [[UIView alloc] initWithFrame:CGRectMake(WIDTH / 2 - 50, HEIGHT / 2 - 50, 110, 110)];
            _alertView.backgroundColor = BACKGROUNDCOLOR;
            _alertView.layer.masksToBounds = YES;
            _alertView.layer.cornerRadius = 10;
            
            _activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 110, 80)];
            [_activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge];
            [_alertView addSubview:_activity];
            
            _alertText = [[UILabel alloc] initWithFrame:CGRectMake(0, 80, 110, 20)];
            _alertText.text = @"正在加载...";
            _alertText.textAlignment = NSTextAlignmentCenter;
            _alertText.textColor = [UIColor whiteColor];
            _alertText.font = TEXTFONT(14);
            [_alertView addSubview:_alertText];
            [_activity startAnimating];
            [window addSubview:_alertView];
        }
    }
    
    - (void)showProgressWithMessage:(NSString *)message {
        if (!_alertView) {
            _alertView = [[UIView alloc] init];
            _alertView.backgroundColor = BACKGROUNDCOLOR;
            _alertView.layer.masksToBounds = YES;
            _alertView.layer.cornerRadius = 8;
            CGSize textSize = [self sizeWithText:message font:TEXTFONT(14) maxW:0];
            _alertText = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, textSize.width, textSize.height)];
            _alertText.font = TEXTFONT(14);
            _alertText.textColor = [UIColor whiteColor];
            _alertText.textAlignment = NSTextAlignmentCenter;
            _alertText.text = message;
            [_alertView addSubview:_alertText];
            _alertView.frame = CGRectMake(MAX(WIDTH / 2 - (CGRectGetMaxX(_alertText.frame) + 10) / 2, WIDTH / 2 - (WIDTH - 20) / 2), HEIGHT / 2 - (textSize.height + 20) / 2, MIN(CGRectGetMaxX(_alertText.frame) + 10, WIDTH - 20),textSize.height + 20);
            UIWindow * window = [UIApplication sharedApplication].keyWindow;
            [window addSubview:_alertView];
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.7 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self stopProgress];
            });
        }
    }
    
    - (void)stopProgress {
        [_activity stopAnimating];
        [_alertView removeFromSuperview];
        _alertView = nil;
    }
    
    //计算文字的大小 maxW限制最大宽度 maxW 传MAXFLOAT,没有限制最大的宽度
    - (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxW:(CGFloat)maxW
    {
        NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
        attrs[NSFontAttributeName] = font;
        CGSize maxSize = CGSizeMake(maxW, MAXFLOAT);
        
        return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
    }
    
    @end
  • 相关阅读:
    Python 使用 environs 库来更好地定义环境变量
    五分钟带你了解map、reduce和filter
    部署React前端和Django后端的3种方法
    marshmallow库更优雅的数据转换
    利用 attrs 和 cattrs 两个库实现 Python 面向对象编程
    parse库,更友好的格式化数据提取方案
    python之prettytable模块格式化打印
    使用类型注解让 Python 代码更易读
    jksj算法训练营-第三课01 数组、链表、跳表
    linux安装java步骤
  • 原文地址:https://www.cnblogs.com/ljmaque/p/LGLProgressHUD.html
Copyright © 2011-2022 走看看