关于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即可,此处就不写了

APP启动页的更多相关文章

  1. App启动页倒计时功能

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6753418.html 示例代码采用 RxJava + RxLifecycle + Data-Binding ...

  2. 用代码获取APP启动页图片

    用代码获取APP启动页图片 源码 - swift // // AppleSystemService.swift // Swift-Animations // // Created by YouXian ...

  3. App启动页设计实例与技巧

    App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...

  4. React-Native App启动页制作(安卓端)

    原文地址:React-Native App启动页制作(安卓端) 这篇文章是根据开源项目react-native-splash-screen来写的.在使用react-native-link命令安装该包后 ...

  5. Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

    转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象 ...

  6. 【Android】Mac下Android Studio设置App启动页

    先将启动页放到项目资源中,图片一般是1080*1920的jpg. 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: public class BZLa ...

  7. app启动页问题

    今天自己做的小作品准备提交,就差一个启动页,各种百度,各种搜,结果还好最后终于出来了,和大家分享一下,这个过程中遇到的各种小问题.(注XCode版本为7.2) 1.启动页一般都是图片,因为苹果有4,4 ...

  8. 每日一博 | 用 Ionic2 创建 App 启动页滑动欢迎界面

    原文  https://my.oschina.net/qinphil/blog/777787 效果如下,图片来自网络 本文例子和上图稍有不同,主要功能如下: 每滑动一下展示一张全屏图片: 滑动到最后一 ...

  9. 使用ViewPagerAdapter 页面引导适配器设置app启动页,引导页面的实现

    一般的app第一次安装启动的时候,都会有一个启动页面和引导页的画面,然后才进入主程序.anndroid中的ViewPagerAdapter 是一个继承与PageAdapter的 页面引导适配器.由于我 ...

随机推荐

  1. Microsoft SQL Server 2008 安装图解(Windows 7)

    简介 本文详细记录了一次完整的Microsoft SQL Server 2008在Windows 7操作系统上的安装过程.注意:Microsoft SQL Server 2008与Windows 7操 ...

  2. MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    原文地址:http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的 ...

  3. SCI写作经典替换词,瞬间高大上!(转)

    转自微信:http://mp.weixin.qq.com/s?__biz=MzA4NDk3ODEwNQ==&mid=202006470&idx=2&sn=e8900b94448 ...

  4. Apache支持.htaccess配置方法

    打开httpd.conf文件用文本编辑器打开后,查找  代码如下 复制代码 Options FollowSymLinks AllowOverride None 改为: Options FollowSy ...

  5. 2D游戏编程3—GDI

    WM_PAINT消息触发程序重新绘制界面,过程如下: PAINTSTRUCT    ps;    // used in WM_PAINT HDC        hdc;    // handle to ...

  6. ReactiveCocoa框架学习1

    写block直接使用inline block的声明类型 在ARC中使用strong,如果不使用strong,则会被销毁 在非ARC中使用copy block在开发中的使用场景 把block保存到对象中 ...

  7. NIO机制总结

    Selector selector = Selector.open(); 普通的IO流的读取,写入都是一个字节一个字节或一个字符一个字符的循环进行,在这个过程中,程序是阻塞的,inputStream虽 ...

  8. iOS OC开发代码规范

    1.变量.类名.函数名 使用驼峰命名法 2.尽量使用完整的单词命名,尽量不采用 缩写单词 3.类名使用大写字母打头,前缀统一加上HH 例如:HHHomePageController 4.类的成员变量使 ...

  9. C#环境下的数值计算库:MathNet

    下面用一个简单的例子来说明MathNet的使用方法: 1. 进入MathNet官网找到数值计算库Math.NET Iridium(Numerics)并下载: 2. 将下载的文件解压缩,在目录下的Bin ...

  10. 如何将angularJs项目与requireJs集成

    关于angularjs.requirejs的基础知识请自行学习 一.简单事例的项目目录如下: -index.html -scripts文件夹 --controller文件夹 --- mianContr ...