当我们更新了一个APP的时候,我们会看到版本新特性的介绍,然后当我们再次打开这个APP的时候,就不会显示这个版本新特性的界面了,那么这个是怎么实现的呢?so easy~
都知道,版本新特性的展示就是几张图片而已,所以用scrollView来实现就好了,这个在之前的文章中已经有过就不说了。
问题是APP怎么知道是首次打开呢?
IOS工程里面有一个info.plist文件,记录着APP的版本号。
所以,我们在AppDelegate中用bundle去加载这个plist,然后获取到版本号,然后从沙盒取出之前版本的号,进行比较,如果版本号一样,就不需要显示,如果不一样,就显示版本新特性。
代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1.创建窗口 self.window = [[UIWindow alloc] init]; self.window.frame = [UIScreen mainScreen].bounds; // 2.设置根控制器 NSString *key = @"CFBundleVersion"; // 上一次的使用版本(存储在沙盒中的版本号) NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:key]; // 当前软件的版本号(从Info.plist中获得) NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key]; if ([currentVersion isEqualToString:lastVersion]) { // 版本号相同:这次打开和上次打开的是同一个版本 self.window.rootViewController = 主控制器; } else { // 这次打开的版本和上一次不一样,显示新特性 self.window.rootViewController = 新特性控制器; // 将当前的版本号存进沙盒 [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:key]; [[NSUserDefaults standardUserDefaults] synchronize]; } // 3.显示窗口 [self.window makeKeyAndVisible]; return YES; }
还有一个问题就是到了scrollView的最后一个界面,进入到主控制器的时候,以什么方式进入呢?
一般从一个控制器跳转到另外一个控制器有三种方法:
1.push
2.modal
3.设置window的根控制器
很显然1,2都不能销毁掉新版本的控制器,所以pass,直接使用第三种方法。
代码如下:
- (void)startClick { // 切换到HWTabBarController /* 切换控制器的手段 1.push:依赖于UINavigationController,控制器的切换是可逆的,比如A切换到B,B又可以回到A 2.modal:控制器的切换是可逆的,比如A切换到B,B又可以回到A 3.切换window的rootViewController */ UIWindow *window = [UIApplication sharedApplication].keyWindow; window.rootViewController = 主控制器; // modal方式,不建议采取:新特性控制器不会销毁 // HWTabBarViewController *main = [[HWTabBarViewController alloc] init]; // [self presentViewController:main animated:YES completion:nil]; }