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

由于项目的原因,简单的封装了一个会话框,知名的有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值