zoukankan      html  css  js  c++  java
  • iOS:定制自适应大小的透明吐司弹框

    一、简单介绍

    创建一个吐司消息的黑色透明弹框,可以根据消息长短自适应大小。

    可以手动创建手动显示手动关闭,也可以手动创建自动显示自动关闭。

    简单好用。

    二、代码使用

    .h文件

    //
    //  LiveHUD.h
    //
    //  Created by 夏远全 on 2019/4/10.
    //  Copyright © 2019年 xiaoshuang. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    static CGFloat const HUDHEIGHT   = 44.0;
    static CGFloat const HUDMINWIDTH = 230.0;
    static CGFloat const HUDPADDING  = 47.0;
    static NSTimeInterval const DURATION = 1.0;
    
    @interface LiveHUD : UIView
    @property (nonatomic, assign) CGFloat bgAlpha; //背景透明度
    @property (nonatomic, strong) UILabel *messageLabel;//消息label
    
    //直接显示(默认1.0秒后会自动隐藏)
    +(void)showLiveHUDWithMessage:(NSString *)message inView:(UIView *)containerView;
    +(void)showLiveHUDWithMessage:(NSString *)message messageFont:(UIFont *)messageFont messageColor:(UIColor *)messageColor inView:(UIView *)containerView;
    
    //只是创建
    +(instancetype)createLiveHUDWithMessage:(NSString *)message inView:(UIView *)containerView;
    +(instancetype)createLiveHUDWithMessage:(NSString *)message messageFont:(UIFont *)messageFont messageColor:(UIColor *)messageColor inView:(UIView *)containerView;
    
    //手动显示
    -(void)showWithNeedHandHide;
    -(void)showWithDurationAutoHide:(NSTimeInterval)duration;
    
    //手动隐藏
    -(void)hide;
    -(void)hideWithDuration:(NSTimeInterval)duration;
    
    //更新文案
    -(void)updateMessage:(NSString *)message;
    
    @end
    
    NS_ASSUME_NONNULL_END

    .m文件

    //
    //  LiveHUD.m
    //
    //  Created by 夏远全 on 2019/4/10.
    //  Copyright © 2019年 xiaoshuang. All rights reserved.
    //
    
    #import "LiveHUD.h"
    
    @interface LiveHUD ()
    @property (nonatomic, strong) UIView  *containerView;
    @end
    
    @implementation LiveHUD
    
    
    #pragma mark - life cycle
    +(instancetype)createLiveHUDWithMessage:(NSString *)message inView:(UIView *)containerView
    {
        LiveHUD *hud = [[self alloc] init];
        hud.messageLabel.text = message;
        hud.containerView = containerView;
        [hud setup];
        return hud;
    }
    
    +(instancetype)createLiveHUDWithMessage:(NSString *)message messageFont:(UIFont *)messageFont messageColor:(UIColor *)messageColor inView:(UIView *)containerView
    {
        LiveHUD *hud = [[self alloc] init];
        hud.messageLabel.text = message;
        hud.messageLabel.font = messageFont;
        hud.messageLabel.textColor = messageColor;
        hud.containerView = containerView;
        [hud setup];
        return hud;
    }
    
    +(void)showLiveHUDWithMessage:(NSString *)message inView:(UIView *)containerView
    {
        LiveHUD *hud = [[self alloc] init];
        hud.messageLabel.text = message;
        hud.containerView = containerView;
        [hud setup];
        [hud show];
    }
    
    +(void)showLiveHUDWithMessage:(NSString *)message messageFont:(UIFont *)messageFont messageColor:(UIColor *)messageColor inView:(UIView *)containerView
    {
        LiveHUD *hud = [[self alloc] init];
        hud.messageLabel.text = message;
        hud.messageLabel.font = messageFont;
        hud.messageLabel.textColor = messageColor;
        hud.containerView = containerView;
        [hud setup];
        [hud show];
    }
    
    -(void)setup
    {
        [self setDefalut];
        [self setupFrame];
        [self addSubViews];
        [self setupSubviewsConstraints];
    }
    
    -(void)setDefalut
    {
        self.alpha = 0.0;
        self.backgroundColor = [HEXCOLOR(0X000000) colorWithAlphaComponent:0.7];
        self.layer.cornerRadius = HUDHEIGHT/2;
        self.layer.masksToBounds = YES;
    }
    
    -(void)setupFrame
    {
        CGFloat LabelWidth = [self.messageLabel sizeThatFits:CGSizeMake(MAXFLOAT, HUDHEIGHT)].width;
        LabelWidth = MAX(LabelWidth+2*HUDPADDING, HUDMINWIDTH);
        self.frame = CGRectMake(0, 0, LabelWidth, HUDHEIGHT);
        self.center = self.containerView.center;
    }
    
    #pragma mark - add subViews
    -(void)addSubViews
    {
        [self addSubview:self.messageLabel];
        [self.containerView addSubview:self];
    }
    
    
    #pragma mark - layout subviews
    -(void)setupSubviewsConstraints
    {
        [self.messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.center.equalTo(@(0));
            make.height.equalTo(@(HUDHEIGHT));
        }];
    }
    
    
    #pragma mark - event response
    
    #pragma mark - public methods
    -(void)setBgAlpha:(CGFloat)bgAlpha{
        _bgAlpha = bgAlpha;
        self.backgroundColor = [HEXCOLOR(0X000000) colorWithAlphaComponent:bgAlpha];
    }
    
    -(void)showWithNeedHandHide{
        
        [UIView animateWithDuration:DURATION/2 animations:^{
            self.alpha = 1.0;
        }];
    }
    
    -(void)showWithDurationAutoHide:(NSTimeInterval)duration{
        
        [UIView animateWithDuration:DURATION/2 animations:^{
            self.alpha = 1.0;
        } completion:^(BOOL finished) {
            [self hideWithDuration:duration];
        }];
    }
    
    -(void)hide{
        [self hideWithDuration:0.0];
    }
    
    -(void)hideWithDuration:(NSTimeInterval)duration{
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            [UIView animateWithDuration:DURATION/2 animations:^{
                self.alpha = 0.0;
            } completion:^(BOOL finished) {
                [self removeFromSuperview];
            }];
    
        });
    }
    
    -(void)updateMessage:(NSString *)message
    {
        self.messageLabel.text = message;
        [self setupFrame];
    }
    
    #pragma mark - private methods
    -(void)show{
        
        [UIView animateWithDuration:DURATION/2 animations:^{
            self.alpha = 1.0;
        } completion:^(BOOL finished) {
            [self hideWithDuration:DURATION];
        }];
    }
    
    
    #pragma mark - setters
    
    #pragma mark - getters
    -(UILabel *)messageLabel{
        if (!_messageLabel) {
            _messageLabel = [[UILabel alloc] init];
            _messageLabel.textAlignment = NSTextAlignmentCenter;
            _messageLabel.textColor = HEXCOLOR(0XFFFFFF);
            _messageLabel.font = [UIFont systemFontOfSize:16];
        }
        return _messageLabel;
    }
    
    @end

    三、参看效果 (触发事件)

  • 相关阅读:
    关于图片标签 <img src=" " alt=" "/> 中的 src 属性消失不见了的问题
    谷歌邮箱无法显示使用 Base64 处理的图片的解决方法
    初等数学问题解答-5:一个Fermat方程的简化形式
    初等数学问题解答-4:无理方程求解
    初等数学问题解答-3:数的整除性
    初等数学问题解答-2:11的整除性
    初等数学问题解答-1:九九乘法表的趣题
    10%的高考数学题小学生全做对了,你呢?
    猿辅导2017年春季初联训练营作业题解答-7: "高次方程组"
    猿辅导2017年春季初联训练营作业题解答-6: "一元二次方程-3"
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/10709077.html
Copyright © 2011-2022 走看看