设为首页 加入收藏

TOP

APP启动页
2017-10-13 10:23:35 】 浏览:7459
Tags:APP 启动

关于APP启动引导页面模块


时间:2016年6月14日
作者:赵锐

  • 模块使用说明

模块暴露在外的接口是- (void)showGuideViewWithImages:(NSArray *)images;调用时候需要传入引导页图片的名字数组即可。

 

@interface GuideManager : NSObject

/**
* 实现功能:APP启动引导图
*
* @param images 引导图图片的名字数组
*/
- (void)showGuideViewWithImages:(NSArray *)images;

 

注意:调用该方法需要在- (void)viewDidAppear: (BOOL)animated; 中调用。

  • 模块实现


主要思路是在用户第一次启动的时候存储版本号,之后每次启动页面都和沙盒中存储的版本号进行对比,如果一致则跳过引导图


- (void)showGuideViewWithImages:(NSArray *)images
{
NSString * key = @"CFBundleShortVersionString";

//获得当前版本号
NSString * versionString = [NSBundle mainBundle].infoDictionary[key];
//获取沙盒中存储的版本号
NSString * sandboxString = [[NSUserDefaults standardUserDefaults] stringForKey:key];
//判断两个版本号是否相等,进而判断是否启动引导图
if (![versionString isEqualToString:sandboxString]&& self.window == nil) {

self.images = images;
self.pageControl.numberOfPages = images.count;
self.window = [UIApplication sharedApplication].keyWindow;

[self.window addSubview:self.guideView];
[self.window addSubview:self.pageControl];
//存储当前版本号到沙盒
[[NSUserDefaults standardUserDefaults] setValue:versionString forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}

 

在这个模块的功能实现中关于传参有两种方案可以选择,一种是传入图片的路径,另一种是传入图片的名字,由于一般我们用Xcode自带的Assets.xcassets来统一管理图片,而这样管理图片时,默认图片没有加入到buddle中,所以如果采用传入图片路径的方案会导致返回值为nil,所以选择传入图片名称,既可以简化代码,也可以实现功能。

关于如何处理pathForResource返回值为nil可以参考http://blog.chinaunix.net/uid-11121450-id-3460066.html。

  • 关于开发模块过程中遇到的坑

      1>首先就是外部调用接口的方法,一般常在viewDidLoad方法中调用,但是如果在这里调用启动页的方法会导致引导图片添加失败,因为此时keyWindow为nil,所以添加不上去。

  2>没有真正理解keyWindow的含义,keywindow取到的是当前活跃的window而不是视图最底层的window。而且在这里就算是成功添加到底层window上,也会由于最终引导页上边盖着一层view而无法交互。

  3>尽量在引导页结束后移除视图的同时进行滞空以防野指针导致奔溃。
- 程序运行截图



关于引导页的具体写法就很简单了 可以用scrollerView或者collectionView,只要在最后加一个button即可,此处就不写了

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇-(UIView *)hitTest:(CGPoint)poi.. 下一篇【转】iOS学习之容易造成循环引用..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目