在这里做的不是程序入口处的新特性引导页
是程序中某一界面的新手引导
当然,思路也适用于新特性引导页的做法
这里用的图片不是整张图,因为整张图在适配屏幕的时候会有压缩,图片较大也比较占用资源
基于MVC的设计模式考虑,我把引导页的view层写在了一个单独的类里,界面和布局我用xib做的
#import <UIKit/UIKit.h>
@interface WTNewbieGuideView : UIView
@property (weak, nonatomic) IBOutlet UIImageView *xin1TextImg;
@property (weak, nonatomic) IBOutlet UIImageView *xin1Img;
@property (weak, nonatomic) IBOutlet UIImageView *xin2TextImg;
@property (weak, nonatomic) IBOutlet UIImageView *xin2Img;
@property (weak, nonatomic) IBOutlet UIImageView *xin3TextImg;
@property (weak, nonatomic) IBOutlet UIImageView *xin3Img;
@end
@implementation WTNewbieGuideView
-(void)awakeFromNib{
[super awakeFromNib];
self.backgroundColor = [UIColor blackColor];
self.alpha = 0.7;
self.userInteractionEnabled = YES;
}
@end
以上是view里的代码
下面是控制器里的代码
因为控制器的界面不是我做的,所以关于界面控件的显示隐藏我单独用hidden去写
整体思路大概是 在点击事件里去判断当前控制器已显示的控件,来去做显示和隐藏
然后通过判断程序的Version信息来让引导页只显示一次
在viewDidLoad里直接去调就可以了
//加载新手引导页
[self setupNewbieGuide];
#pragma mark 新手引导
-(void)setupNewbieGuide{
//判断程序的Version信息 让引导页只显示一次
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *saveVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"saveVersion"];
// 测试用 >>> 让每次都显示
saveVersion = @"jksdhf";
if ([currentVersion isEqualToString:saveVersion]) {
//如果一样 就不显示引导页
} else {
//不一样
//显示引导页
[self NewbieGuide];
//将当前的 Version 信息缓存到沙盒
[[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"saveVersion"];
}
}
-(void)NewbieGuide{
//禁用底部界面的用户交互
[self.view setUserInteractionEnabled:NO];
WTNewbieGuideView * newbieGuideView = [[[NSBundle mainBundle] loadNibNamed:@"WTNewbieGuideView" owner:nil options:nil] lastObject];
newbieGuideView.frame = self.view.bounds;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissGuideView)];
[newbieGuideView addGestureRecognizer:tap];
[self.navigationController.view addSubview:newbieGuideView];
self.newbieGuideView = newbieGuideView;
//第一层引导页
_startSingBtn.hidden = YES;
self.songBgImg.hidden = NO;
newbieGuideView.xin2Img.hidden = YES;
newbieGuideView.xin2TextImg.hidden = YES;
newbieGuideView.xin3Img.hidden = YES;
newbieGuideView.xin3TextImg.hidden = YES;
}
-(void)dismissGuideView{
//第二层引导页
if (self.newbieGuideView.xin1Img.hidden == NO) {
_startSingBtn.hidden = NO;
self.songBgImg.hidden = YES;
self.newbieGuideView.xin1Img.hidden = YES;
self.newbieGuideView.xin1TextImg.hidden = YES;
self.newbieGuideView.xin2Img.hidden = NO;
self.newbieGuideView.xin2TextImg.hidden = NO;
self.noticeView.noticeImg.hidden = YES;
}
//三层引导页
else if (self.newbieGuideView.xin2Img.hidden == NO) {
self.newbieGuideView.xin1Img.hidden = YES;
self.newbieGuideView.xin1TextImg.hidden = YES;
self.newbieGuideView.xin2Img.hidden = YES;
self.newbieGuideView.xin2TextImg.hidden = YES;
self.noticeView.noticeImg.hidden = NO;
self.newbieGuideView.xin3Img.hidden = NO;
self.newbieGuideView.xin3TextImg.hidden = NO;
self.navigationItem.rightBarButtonItem.title = @" ";
}
//关闭引导页
else if (self.newbieGuideView.xin3Img.hidden == NO) {
self.newbieGuideView.hidden = YES;
self.navigationItem.rightBarButtonItem.title = @"原唱";
//最后记得开启用户交互,否则引导页结束界面就点不动了
[self.view setUserInteractionEnabled:YES];
}
}
附上几张效果图