IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    IOS版本新特性界面

    键盘上的舞者发表于 2015-10-03 19:31:01
    love 0

    当我们更新了一个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];
    }

     



沪ICP备19023445号-2号
友情链接