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
  • 相关阅读:
    CCF CSP 题解
    CCF CSP 2019032 二十四点
    CCF CSP 2018121 小明上学
    CCF CSP 2019092 小明种苹果(续)
    CCF CSP 2019091 小明种苹果
    CCF CSP 2019121 报数
    CCF CSP 2019031 小中大
    CCF CSP 2020061 线性分类器
    CCF CSP 2020062 稀疏向量
    利用国家气象局的webservice查询天气预报(转载)
  • 原文地址:https://www.cnblogs.com/ljmaque/p/LGLProgressHUD.html
Copyright © 2011-2022 走看看