你的位置:首页 > 操作系统

[操作系统]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即可,此处就不写了