前言:引导蒙版是现在很流行的一种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"];

}

转载于:https://juejin.im/post/5a31d4cc6fb9a045104a7fd6

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐