前言:引导蒙版是现在很流行的一种APP欢迎方式,现在的项目之前两次版本的更新迭代都用到了引导蒙版,本来是在控制器中直接添加的,毕竟也就几行代码,但是后来发现这也是个常用功能,还是封装成一个工具类比较好。
Github:看这里
思路整理:
1、创建蒙版工具类对象
2、用户登录时根据本地数据判断时候为首次登陆
3、如果为首次登陆,将蒙版添加到当前窗口上
具体实现:
1、创建蒙版工具类对象
新建TipMaskView对象,懒加载图片数组,imageView和剩余视图张数,声明初始化方法
@interface TipMaskView : UIView
@property (nonatomic, copy) NSArray *imageArray;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, assign) NSInteger remainCount;
-(instancetype)initWithImages:(NSArray *)images;
这里的思路是通过-(instancetype)initWithImages:(NSArray *)images这一初始化方法,将蒙版图片传值到我们创建的TipMaskView工具类对象中。通过改变imageView上图片的方式,动态逐个显示引导蒙版。
/**在初始化方法中对fram和imageArray进行赋值
*/
-(instancetype)initWithImages:(NSArray *)images{
if (self = [super init]) {
self.frame = [UIScreen mainScreen].bounds;
self.imageArray = images;
}
return self;
}
定义宏KIPHONE6用来判断当前设备,为了显示效果,一般UI在设计时会至少针对iphone5和iphone6及以上版本设计两套蒙版图给我们使用:
#define KIPHONE6 [UIScreen mainScreen].bounds.size.width > 320?YES:NO
在imageArray不为空的情况下对TipMaskView进行构图,并添加到当前窗口上;
给tipMaskView添加手势,在多个蒙版时进行逐个展示。
- (void)setImageArray:(NSArray *)imageArray{
_imageArray = imageArray;
_remainCount = imageArray.count;
self.imageView = [[UIImageView alloc]initWithFrame:self.frame];
self.imageView.image = [UIImage imageNamed:imageArray[0]];
/**根据设备类型判断需要添加的图片
这里暂时给iphone5图片命名拼接_temp字段,具体命名规范可以根据个人习惯进行修改
*/
if (KIPHONE6 == YES) {
self.imageView.image = [UIImage imageNamed:imageArray[0]];
}else{
self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_temp",imageArray[0]]];
};
self.imageView.userInteractionEnabled = YES;
[self addSubview:self.imageView];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideMask:)];
[self addGestureRecognizer:tap];
[[UIApplication sharedApplication].windows.lastObject addSubview:self];
}
在手势的监听事件中,根据_remainCount判断当前的蒙版,如果为最后一个,动态消失,显示主界面,否则显示下一张:
- (void)hideMask:(UITapGestureRecognizer *)sender{
__weak typeof(self) weakSelf = self;
_remainCount--;
if (_remainCount == 0) {
[UIView animateWithDuration:0.5 animations:^{
weakSelf.alpha = 0;
} completion:^(BOOL finished) {
[weakSelf removeFromSuperview];
sender.enabled = YES;
}];
}else{
if (KIPHONE6 == YES) {
self.imageView.image = [UIImage imageNamed:_imageArray[_imageArray.count-_remainCount]];
}else{
self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_temp",_imageArray[_imageArray.count-_remainCount]]];
};
}
}
2、用户登录时根据本地数据判断时候为首次登陆
在界面显示时,根据hasTipMask字段判断用户是否为首次登陆,如果为首次登陆,实例化_tipMaskView对象,
_tipMaskView = [[TipMaskView alloc]initWithImages:@[@"Propmt_main1",@"Propmt_main2"]];
这一行代码即可完成引导蒙版的集成。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults boolForKey:@"hasTipMask"]) {
_tipMaskView = [[TipMaskView alloc]initWithImages:@[@"Propmt_main1",@"Propmt_main2"]];
[defaults setBool:YES forKey:@"hasTipMask"];
}
网友评论