iOS引导蒙版-工具类封装

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

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,578评论 6 30
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,554评论 1 14
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,147评论 5 13
  • 1.oc基本语法 // // main.m // oc基本语法 // // Created by lanou on...
    GOT_HODOR阅读 451评论 0 0
  • #import @class XRCarouselView;typedef void(^ClickBlock)(N...
    猛大不萌阅读 540评论 0 0