1.在appDlegate 中 初始化导航页
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]];
self.window.backgroundColor = [UIColorwhiteColor];
// 引导页
if (![DEF_PERSISTENT_GET_OBJECT(@"showGuide")boolValue]) //DEF_PERSISTENT_GET_OBJECT 为.h 中的宏
//判断是不是第一次进入,一开始bool 给否 !否 == 真 则执行花括号中的内容,开始进行导航页布局
{
//已进入导航页,立马把bool改为yes 下一次进入时 !真 == 假,则进入else中
DEF_PERSISTENT_SET_OBJECT([NSNumbernumberWithBool:YES],@"showGuide");
GuideView *guide = [[GuideViewalloc] initWithFrame:self.window.bounds]; //初始化导航页
__weak WMAppDelegate *weakSelf =self; //__weak 是为了防止在guide页面,会对weakSelf强引用,造成不能释放的奔溃
guide.callBack = ^{
//初始化抽屉效果 (这里是举个例子让它开始进行抽屉,现实是,启动app正常显示流程)
[weakSelfinitMMDrawer];
};
[self.windowaddSubview:guide];//把引导页加上去
}
else
{
//这里是第二次进入时,直接初始化抽屉效果(现实是,启动app正常显示流程)
[selfinitMMDrawer];
}
2. 在.h 中定义宏
/**
* 取出永久存储的对象
*
* @paramkey 所需对象对应的key
* @returnkey所对应的对象
*/
#define DEF_PERSISTENT_GET_OBJECT(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]
3.导航页GuideView.h
/**
* App首次开机引导页
*/
@interface GuideView :UIScrollView //注意这里一定是 UIScrollerView
@property (nonatomic,copy)void (^callBack)(void);
4.导航页GuideView.m
/**
* 引导页张数
*/
#define DEF_GUIDE_COUNT 3
@implementation GuideView
- (id)initWithFrame:(CGRect)frame
{
self = [superinitWithFrame:frame];
if (self)
{
self.contentSize =CGSizeMake(DEF_WIDTH(self)*DEF_GUIDE_COUNT,DEF_HEIGHT(self));
self.backgroundColor = [UIColorblackColor];
self.showsHorizontalScrollIndicator =NO;
self.pagingEnabled =YES;
self.backgroundColor = [UIColorclearColor];
for (int i=0; i<DEF_GUIDE_COUNT; i++)
{
UIImageView *imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(DEF_WIDTH(self)*i,0, DEF_WIDTH(self),DEF_HEIGHT(self))]; //DEF_WIDTH & DEF_WIDTH 屏幕宽高下面写了
/*
/**
* 获取视图宽度
* @paramview 视图对象
* @return宽度
*/
#define DEF_WIDTH(view) view.bounds.size.width
/**
* 获取视图高度
* @paramview 视图对象
* @return高度
*/
#define DEF_HEIGHT(view) view.bounds.size.height
*/
imageView.image = [UIImageimageWithContentsOfFile:[[[NSBundlemainBundle] bundlePath]stringByAppendingPathComponent:DEF_SCREEN_IS_640_1136?[NSStringstringWithFormat:@"Guide%d-568@2x.png",i]:[NSStringstringWithFormat:@"Guide%d@2x.png",i]]]; //DEF_SCREEN_IS_640_1136判断是否为640*1136
/**
* 判断屏幕尺寸是否为640*1136
* @return判断结果(YES:是 NO:不是)
*/
//#define DEF_SCREEN_IS_640_1136 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640,1136), [[UIScreen mainScreen] currentMode].size) : NO)
[selfaddSubview:imageView];
if (i == DEF_GUIDE_COUNT-1)
{
//开始按钮,一般放在最后一张引导页上,frame大小自己根据需要进行调整
UIButton *button = [[UIButtonalloc] initWithFrame:CGRectMake(0,0, DEF_WIDTH(self),DEF_HEIGHT(self))];
[button setImage:[UIImageimageNamed:@""]forState:UIControlStateNormal];
[button addTarget:selfaction:@selector(beginClick)forControlEvents:UIControlEventTouchUpInside];
imageView.userInteractionEnabled =YES;
[imageViewaddSubview:button];
}
}
}
return self;
}
#pragma mark - 点击事件
- (void)beginClick
{
if (self.callBack) {
self.callBack();
}
self.userInteractionEnabled =NO;
[UIViewanimateWithDuration:0.3animations:^{
self.alpha =0.0;
}completion:^(BOOL finished) {
[selfremoveFromSuperview];
}];
}
5.根据屏幕高度不同,更改‘现在体验’按钮的位置
CGRect rect = [[UIScreen mainScreen] bounds];
CGSize size = rect.size;
CGFloat height = size.height;//拿到屏幕高度
if (height == 480)
{
//4/4s
[button setFrame:CGRectMake((DEF_WIDTH(self) - DEF_WIDTH(self)/2)/2 + 20 , DEF_HEIGHT(self)-120, DEF_WIDTH(self)/2-40, 40)];
}
else if (height == 568)
{
//5/5s
[button setFrame:CGRectMake((DEF_WIDTH(self) - DEF_WIDTH(self)/2)/2 + 20 , DEF_HEIGHT(self)-140, DEF_WIDTH(self)/2-40, 40)];
}
else if (height == 667)
{
//6
[button setFrame:CGRectMake((DEF_WIDTH(self) - DEF_WIDTH(self)/2)/2 + 20 , DEF_HEIGHT(self)-160, DEF_WIDTH(self)/2-40, 40)];
}
else if (height ==736)
{
//6+
[button setFrame:CGRectMake((DEF_WIDTH(self) - DEF_WIDTH(self)/2)/2 + 20 , DEF_HEIGHT(self)-180, DEF_WIDTH(self)/2-40, 40)];
}
总结:应该是比较完善的一套了。