实现软件版本新特性的具体步奏

1、版本新特性:

控制器的跳转不能使用push 和modal,

push: 采用的时栈的方式,无法销毁之前的控制器

modal:无法销毁之前的控制器

应该使用rootViewController

2、实现过程:

①设置滚动视图,一般是整个界面

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<span style="color: rgb(0, 0, 255);">- (void)setupScrollView

{

    UIScrollView *scrollView = [[UIScrollView alloc] init];

    scrollView.frame = self.view.bounds;

    scrollView.delegate
= self;

    [self.view addSubview:scrollView];

    

    // 2.添加图片

    CGFloat imageW = scrollView.frame.size.width;

    CGFloat imageH = scrollView.frame.size.height;

    for
(int
index = 0; index<IWNewfeatureImageCount; index++) {

        UIImageView *imageView = [[UIImageView alloc] init];

        

        // 设置图片

        NSString *name = [NSString stringWithFormat:@"new_feature_%d", index + 1];

        imageView.image = [UIImage imageWithName:name];

        

        // 设置frame

        CGFloat imageX = index * imageW;

        imageView.frame = CGRectMake(imageX, 0, imageW, imageH);

        

        [scrollView addSubview:imageView];

        

        // 在最后一个图片上面添加按钮

        if
(index == IWNewfeatureImageCount - 1) {

            [self setupLastImageView:imageView];

        }

    }

    

    // 3.设置滚动的内容尺寸

    scrollView.contentSize = CGSizeMake(imageW * IWNewfeatureImageCount, 0);

   // 取消水平滚动条 scrollView.showsHorizontalScrollIndicator = NO;

    scrollView.pagingEnabled = YES;

// 取消滚动的弹簧效果  

  scrollView.bounces = NO;

}

</span>

②设置分页,求出分页的页码,需要使用UIScrollView的代理,使用代理方法

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// 1.添加

    UIPageControl *pageControl = [[UIPageControl alloc] init];

    pageControl.numberOfPages = IWNewfeatureImageCount;

    CGFloat centerX = self.view.frame.size.width * 0.5;

    CGFloat centerY = self.view.frame.size.height - 30;

    pageControl.center = CGPointMake(centerX, centerY);

    pageControl.bounds = CGRectMake(0, 0, 100, 30);

    pageControl.userInteractionEnabled = NO;

    [self.view addSubview:pageControl];

    self.pageControl = pageControl;

    

    // 2.设置圆点的颜色

    pageControl.currentPageIndicatorTintColor = IWColor(253, 98, 42);

    pageControl.pageIndicatorTintColor = IWColor(189, 189, 189);

②求出分页的页码,需要使用UIScrollView的代理,使用代理方法

/**

 *  只要UIScrollView滚动了,就会调用

 *

 */

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    // 1.取出水平方向上滚动的距离

    CGFloat offsetX = scrollView.contentOffset.x;

    

    // 2.求出页码

    double
pageDouble = offsetX / scrollView.frame.size.width;

    int
pageInt = (int)(pageDouble + 0.5);

    self.pageControl.currentPage = pageInt;

}

③在最后一张图片添加按钮,跳转控制器

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

- (void)setupLastImageView:(UIImageView *)imageView

{

    // 0.让imageView能跟用户交互

    imageView.userInteractionEnabled = YES;

    

    // 1.添加开始按钮

    UIButton *startButton = [[UIButton alloc] init];

    [startButton setBackgroundImage:[UIImage imageWithName:@"new_feature_finish_button"] forState:UIControlStateNormal];

    [startButton setBackgroundImage:[UIImage imageWithName:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];

    

    // 2.设置frame

    CGFloat centerX = imageView.frame.size.width * 0.5;

    CGFloat centerY = imageView.frame.size.height * 0.6;

    startButton.center = CGPointMake(centerX, centerY);

    startButton.bounds = (CGRect){CGPointZero, startButton.currentBackgroundImage.size};

    

    // 3.设置文字

    [startButton setTitle:@"开始使用"
forState:UIControlStateNormal];

    [startButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [startButton addTarget:self
action:@selector(start) forControlEvents:UIControlEventTouchUpInside];

    [imageView addSubview:startButton];

    

    // 4.添加checkbox

    UIButton *checkbox = [[UIButton alloc] init];

    checkbox.selected = YES;

    [checkbox setTitle:@"分享给大家"
forState:UIControlStateNormal];

    [checkbox setImage:[UIImage imageWithName:@"new_feature_share_false"] forState:UIControlStateNormal];

    [checkbox setImage:[UIImage imageWithName:@"new_feature_share_true"] forState:UIControlStateSelected];

    checkbox.bounds = CGRectMake(0, 0, 200, 50);

    CGFloat checkboxCenterX = centerX;

    CGFloat checkboxCenterY = imageView.frame.size.height * 0.5;

    checkbox.center = CGPointMake(checkboxCenterX, checkboxCenterY);

    [checkbox setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    checkbox.titleLabel.font = [UIFont systemFontOfSize:15];

    [checkbox addTarget:self
action:@selector(checkboxClick:) forControlEvents:UIControlEventTouchUpInside];

    checkbox.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 10);

    [imageView addSubview:checkbox];

}

④点击开始使用时候,切换根控制器

- (void)start

{

    // 显示状态栏

    [UIApplication sharedApplication].statusBarHidden = NO;

    // 切换窗口的根控制器

    self.view.window.rootViewController = [[IWTabBarViewController alloc] init];

}

④利用沙盒,将使用的软件版本号与沙盒中存储的版本号进行对比,高于原版本就跳转到 IWNewfeatureViewController ,相同就跳转到IWTabBarViewController:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

NSString
*key = @"CFBundleVersion";

   

   // 取出沙盒中存储的上次使用软件的版本号

   NSUserDefaults
*defaults = [NSUserDefaults
standardUserDefaults];

   NSString
*lastVersion = [defaults stringForKey:key];

   

   // 获得当前软件的版本号

   NSString
*currentVersion = [NSBundle
mainBundle].infoDictionary[key];

   

   if
([currentVersion isEqualToString:lastVersion]) {

       // 显示状态栏

       application.statusBarHidden = NO;

       

       self.window.rootViewController = [[IWTabBarViewController alloc] init];

   } else
{ // 新版本

       self.window.rootViewController = [[IWNewfeatureViewController alloc] init];

       // 存储新版本

       [defaults setObject:currentVersion forKey:key];

       [defaults synchronize];

   }

时间: 2024-11-14 12:43:23

实现软件版本新特性的具体步奏的相关文章

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.------------SDK2.0功能-------------2 2.1. 泛型:2 3. --------------sdk3.0  增加了以下功能..2 3.1. LINQ 3 4.  ----------sdk4

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系 1 2. paip.------------SDK2.0功能------------- 2 2.1. 泛型: 2 3. --------------sdk3.0  增加了以下功能.. 2 3.1. LINQ 3 4.  ----------sdk4.0 新加功能------------ 3 5. ].Net4.5的五项强大新特性 3 5.

JDK各版本新特性总结

JDK各版本新特性总结 JDK 1.7 新特性  1.switch中可以使用string字符串了 2.<>的运用, List<String> tempList = new ArrayList<>(); 即泛型实例化类型自动推断 3.语法上支持集合,而不一定是数组 final List<Integer> piDigits = [ 1,2,3,4,5,8 ]; 对Java集合(Collections)的增强支持,摒弃了Java集合接口的实现类,如:ArrayLi

iOS程序实现程序的版本新特性显示功能

每个程序都会多个版本,每个版本的功能会进一步优化或调整,将这些功能简明扼要的展示给急于尝鲜的用户,这就是版本新特性的功能. 程序第一次安装或升级之后的第一次启动,都会出现三到四页功能介绍页面,划屏浏览,然后才是正式进入程序.同版本的程序二次启动则没有这些介绍页.这就是版 本新特性现实界面. 如何实现这个功能呢? 需求:第一次安装或版本升级,显示新特性:同版本第二次进入,不显示新特性. 分析:程序启动会显示不同界面,就是window加载的根控制器rootViewController是不相同的.如何

TypeScript系列1-1.5版本新特性

1. 简介 随着PC端快速向移动端迁移,移动(体验)优先的概念也越来越响.由于ReactJS目前移动端仅仅支持iOS,因此移动端Web开发框架只能选择: AngularJS/Angula2 + Ionic框架 + Cordova.想要学习好Angula2以及阅读其代码, 就必须了解和学习TypeScript,也因此需要学习好ES6以及Web Component.近期将开始学习TypeScript语言. 下面先看看TypeScript语言的发展: 鉴于JavaScript这种脚本语言很难应用于大规

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7

Atitit.jquery 版本新特性attilax总结

Atitit.jquery 版本新特性attilax总结 1. Jq1.4 1 2. 1.5 1 3. 1.6 3 4. Jq1.7 3 ⒉提升了事件委派时的性能有了大幅度的提升,尤其是在ie7下: 4 ⒊更好的在 ie 6/7/8 上支持 html5: 4 ⒋切换动画更加直观: 4 ⒌匿名模块定义 awd 4 ⒍jQuery.Deferred 4 ⒎jQuery.isNumeric() 4 5. Jq1.8 5 5.1. jQuery 1.8 5 5.1.1. 可定制 5 5.1.2. 自动生

《转》MySQL 5.7版本新特性连载

MySQL 5.7版本新特性连载(一) 本文将和大家一起分享下5.7的新特性,不过我们要先从即将被删除的特性以及建议不再使用的特性说起.根据这些情况,我们在新版本及以后的版本中,应该不再使用,避免未来产生兼容性问题. 本文是基于MySQL-5.7.7-rc版本,未来可能 还会发生更多变化. 1.即将删除的特性1.1.InnoDB monitoring features,详见:WL#7377(访问地址:http://dev.mysql.com/worklog/task/?id=7377,下面的其他

Atitit 发帖机系列(8) &#160;词法分析器v5 版本新特性说明)

Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词法分析 使用循环 V3 sql的词法分析 atitit..sql update语法的词法分析,与语法ast构建 - V1版   anno 解析器 基于fsm设计模式 V2 Atitit.antlr实现词法分析?-?attilax /AtiPlatf_ee/src/com/attilax/fsm/Ja