美文网首页
iOS开发-DialogHUD会话框/提示框

iOS开发-DialogHUD会话框/提示框

作者: Kegem | 来源:发表于2018-07-26 19:34 被阅读223次

    由于项目的原因,简单的封装了一个会话框,知名的有MBProgressHUDDLHDActivityIndicator,使用的人都很多,以前的会话框都会覆盖整个页面,在会话框消失前,做不了任何操作,当然啦,类似的会话框也有很多,我这个只是为了现在的项目(JOIN)所写,约束是用Masonry,所以有需要的话还需要导入Masonry,下面来介绍一下KJDialogHUD
    BaseView

    • 显示模式
      这里也考虑到两种情况,一个是透明层会覆盖整个SuperView,让会话框在消失前,不允许有其它操作;一个是透明层不会覆盖整个SuperView,只按照指定的样式进行显示
    typedef NS_ENUM(NSInteger, KJDialogBaseMode) {
        KJDialogBaseNone = 0,   //内容居中展示,该模式下,透明层不会覆盖superView,可以设置kjDistance来改变centerY
        KJDialogBaseTop,        //内容紧靠顶部展示,该模式下,透明层不会覆盖superView,可以设置kjDistance来改变顶部距离
        KJDialogBaseBottom,     //内容紧靠底部展示,该模式下,透明层不会覆盖superView,可以设置kjDistance来改变顶部距离
        
        KJDialogBaseFull,       //内容居中展示,该模式下,透明层会覆盖整个superView,可以设置kjDistance来改变centerY
        KJDialogBaseFull_t,     //内容紧靠顶部展示,该模式下,透明层会覆盖superView,可以设置kjDistance来改变底部距离
        KJDialogBaseFull_b,     //内容紧靠底部展示,该模式下,透明层会覆盖superView,可以设置kjDistance来改变底部距离
    };
    
    • 动画展示
      这里也内置了几个简单的动画效果:
    typedef NS_ENUM(NSInteger, KJAnimationShowMode) {
        KJAnimationNone = 0,        //无动画效果
        KJAnimationShake,           //摇动、抖动
        KJAnimationHeartbeat,       //心跳
        KJAnimationMoveLeft,        //从左到右移动
        KJAnimationMoveRight,       //从右到左移动
        KJAnimationMoveTop,         //从上到下移动 
        KJAnimationMoveBottom       //从下到上移动
    };
    

    当然啦,这些动画对于肯定是不会满足各种要求的项目,这里也有给出由外部提供动画的方法:

    /**设置展示的时间,默认是一直展示,
     当该值>0时,就会在该时间后会自动消失
     当该值<=0时,就不会自动消失,需要主动调用kjHiddenFromSuperView来让其消失
     */
    - (void)kjShowTime:(NSTimeInterval)kjSeconds;
    /**动画展示-内置简单动画KJAnimationShowMode*/
    - (void)kjShowTime:(NSTimeInterval)kjSeconds
           kjAnimation:(KJAnimationShowMode)kjAnimation;
    /**动画展示-由外部自定义动画*/
    - (void)kjShowTime:(NSTimeInterval)kjSeconds
       customAnimation:(void (^) (UIView *kjView))kjAnimation;
    

    下面完整的贴出BaseView的h文件,其实刚开始在设计的时候,由于只考虑到现在的项目,在后续为了适配大多数项目需求的时候,重新修改了,但是也多出很多没必要的方法,其实外部可以通过对象能非常自由的自定义:

    //
    //  KJDialogBaseView.h
    //  Join
    //
    //  Created by JOIN iOS on 2018/7/19.
    //  Copyright © 2018年 huangkejin. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface KJDialogBaseView : UIView
    
    typedef NS_ENUM(NSInteger, KJDialogBaseMode) {
        KJDialogBaseNone = 0,   //内容居中展示,该模式下,透明层不会覆盖superView,可以设置kjDistance来改变centerY
        KJDialogBaseTop,        //内容紧靠顶部展示,该模式下,透明层不会覆盖superView,可以设置kjDistance来改变顶部距离
        KJDialogBaseBottom,     //内容紧靠底部展示,该模式下,透明层不会覆盖superView,可以设置kjDistance来改变顶部距离
        
        KJDialogBaseFull,       //内容居中展示,该模式下,透明层会覆盖整个superView,可以设置kjDistance来改变centerY
        KJDialogBaseFull_t,     //内容紧靠顶部展示,该模式下,透明层会覆盖superView,可以设置kjDistance来改变底部距离
        KJDialogBaseFull_b,     //内容紧靠底部展示,该模式下,透明层会覆盖superView,可以设置kjDistance来改变底部距离
    };
    
    typedef NS_ENUM(NSInteger, KJAnimationShowMode) {
        KJAnimationNone = 0,        //无动画效果
        KJAnimationShake,           //摇动、抖动
        KJAnimationHeartbeat,       //心跳
        KJAnimationMoveLeft,        //从左到右移动
        KJAnimationMoveRight,       //从右到左移动
        KJAnimationMoveTop,         //从上到下移动 
        KJAnimationMoveBottom       //从下到上移动
    };
    
    /**初始化*/
    - (instancetype)initSuperView:(UIView *)sView;
    /**内容背景View*/
    @property (strong, nonatomic) UIView *kjBaseView;
    /**设置内容背景颜色 默认为blackColor*/
    @property (nonatomic) UIColor *kjBaseColor;
    /**设置内容背景圆角 默认是4*/
    @property (assign, nonatomic) CGFloat kjRadius;
    /**配合KJDialogBaseMode,设置自定义约束,
     当为KJDialogBaseNone或KJDialogBaseFull时,该值区分正负值,其它模式下不区分正负值(取绝对值),
     默认为0
     */
    @property (assign, nonatomic) CGFloat kjDistance;
    /**设置覆盖样式 默认None*/
    @property (assign, nonatomic) KJDialogBaseMode kjBaseMode;
    /**设置展示的时间,默认是一直展示,
     当该值>0时,就会在该时间后会自动消失
     当该值<=0时,就不会自动消失,需要主动调用kjHiddenFromSuperView来让其消失
     */
    - (void)kjShowTime:(NSTimeInterval)kjSeconds;
    /**动画展示-内置简单动画KJAnimationShowMode*/
    - (void)kjShowTime:(NSTimeInterval)kjSeconds
           kjAnimation:(KJAnimationShowMode)kjAnimation;
    /**动画展示-由外部自定义动画*/
    - (void)kjShowTime:(NSTimeInterval)kjSeconds
       customAnimation:(void (^) (UIView *kjView))kjAnimation;
    /**外部调用隐藏,当时间设置为<=0时,是不会自动隐藏的,需要调用该方法进行隐藏*/
    + (void)kjHiddenFromSuperView:(UIView *)kjSuperV;
    
    @end
    

    下面只介绍其中一个子类,在我现在的项目(JOIN)中,有很多类似微博主页的效果,就是多个UITableViewController,Child到一个主控制器中,主控制器头部是下拉放大,导致子控制器不能有下拉刷新的效果,但是又要各自控制器都有刷新的提示,这也是有这个会话框子类的由来:
    KJDialogActivityText
    这里给出了四种模式,Activity在上下左右的不同方向,导致约束不一样,其实和BaseView的想法是一样的,由于开始的设计没考虑到其它项目,所以对于后续的修改,多出了很多没必要的属性设置,不过我也没删除,大家看了也会动,下面直接给出h文件内容:

    //
    //  KJDialogActivityText.h
    //  Join
    //
    //  Created by JOIN iOS on 2018/7/24.
    //  Copyright © 2018年 huangkejin. All rights reserved.
    //
    
    #import "KJDialogBaseView.h"
    
    @interface KJDialogActivityText : KJDialogBaseView
    
    typedef NS_ENUM(NSInteger, KJDialogActivityDirection) {
        KJDialogActivityLeft = 0,   //activity在左,文字在右,该模式下是UIActivityIndicatorViewStyleWhite
        KJDialogActivityRight,      //activity在右,文字在左,该模式下是UIActivityIndicatorViewStyleWhite
        KJDialogActivityTop,        //activity在上,文字在下,该模式下是UIActivityIndicatorViewStyleWhiteLarge
        KJDialogActivityBottom,     //activity在下,文字在上,该模式下是UIActivityIndicatorViewStyleWhiteLarge
    };
    
    /**UIlabel*/
    @property (strong, nonatomic) UILabel *kjLabel;
    /**设置文字和Activity之间的间隔  >0的值
     KJDialogActivityLeft|KJDialogActivityRight 默认是5
     KJDialogActivityTop|KJDialogActivityBottom 默认是10
     */
    @property (assign, nonatomic) CGFloat kjSpace;
    /**设置Activity颜色*/
    @property (strong, nonatomic) UIColor *kjActivityColor;
    /**设置Activity方向 默认KJDialogActivityLeft*/
    @property (assign, nonatomic) KJDialogActivityDirection kjDirection;
    /**设置内容最小高度(同时也是固定的宽度),
     只有在KJDialogActivityTop|KJDialogActivityBottom模式下有效,
     默认是120 必须是>0的值*/
    @property (assign, nonatomic) CGFloat kjMinHeight;
    
    @end
    

    注释都写的很清楚,感觉没什么需要特别说明的,其实还有另外两个子类KJDialogPureTextKJDialogImageText,看名字就知道作用了,代码就不再贴出了。
    下面就说说使用:
    这里也只是给出各种子类的其中一种使用方法,其它的使用设置相关的属性即可。

    • 纯文本
    /**展示文本提示框 放置在UIWindow上*/
    + (void)kjShowAllText:(NSString *)kjText {
        KJDialogPureText *kjDialog = [[KJDialogPureText alloc] initSuperView:nil];
        kjDialog.kjDistance = -49.0;
        kjDialog.kjLabel.font = [UIFont systemFontOfSize:15.0];
        kjDialog.kjLabel.text = kjText;
        [kjDialog kjShowTime:2.5];
    }
    
    • Activity
    /**展示Activity文本框,Activity在左|文本在右,放置在指定的UIView上*/
    + (void)kjShowLeftActFromText:(NSString *)kjText
                            sView:(UIView *)kjView {
        KJDialogActivityText *kjDialog = [[KJDialogActivityText alloc] initSuperView:kjView];
        kjDialog.kjDistance = -49.0;
        kjDialog.kjLabel.font = [UIFont systemFontOfSize:15.0];
        kjDialog.kjLabel.text = kjText;
        [kjDialog kjShowTime:0];
    }
    
    • 图片
    /**展示图片文本框,图片在上|文本在下,放置在指定的UIView上,并覆盖整个UIView*/
    - (void)kjShowTopImgFromText:(NSString *)kjText
                        fullView:(UIView *)kjView {
        KJDialogImageText *kjDialog = [[KJDialogImageText alloc] initSuperView:kjView];
        kjDialog.kjDistance = -49.0;
        kjDialog.kjDirection = KJDialogImageTop;
        kjDialog.kjLabel.text = kjText;
        kjDialog.kjLabel.font = [UIFont systemFontOfSize:15.0];
        kjDialog.kjImgV.image = [UIImage imageNamed:@"imageName"];
        [kjDialog kjShowTime:0];
    }
    

    记得哦 ,使用需要导入Masonry
    由于设计刚开始的时候是为了现在的项目使用,后续的修改再让其能使用在大多数项目,当然啦,写的也没多复杂,也没有那么多炫酷的特效,不喜欢勿喷,谢谢~
    希望能帮助到大家!
    https://github.com/hkjin/KJDialogHUD

    相关文章

      网友评论

          本文标题:iOS开发-DialogHUD会话框/提示框

          本文链接:https://www.haomeiwen.com/subject/wttimftx.html