[iOS微博项目 - 1.7] - 版本新特性

A.版本新特性

1.需求

  • 第一次使用新版本的时候,不直接进入app,而是展示新特性界面

github: https://github.com/hellovoidworld/HVWWeibo

2.思路

  • [[NSBundle mainBundle] infoDictionary]取得当前版本号(最新版本),版本号存储在了info.plist中
  • 从preference取得上一次使用的版本号
  • 将讲个版本号进行对比,如果相同就是当前是最新版本,直接进入app;如果不相同,就进入新特性界面并保存最新版本号到preference

当前版本号:

当前版本号的key

3.实现

(1)创建一个新的目录来处理新特性加载

自定义一个集成UIViewController的类来处理新特性界面

(注意scrollView没有相应控制器,只能在其他view上加载)

(2)在AppDelegate中app加载完毕方法中

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     // Override point for customization after application launch.
 3
 4     // 启动后显示状态栏
 5     UIApplication *app = [UIApplication sharedApplication];
 6     app.statusBarHidden = NO;
 7
 8     // 设置window
 9     self.window = [[UIWindow alloc] init];
10     self.window.frame = [UIScreen mainScreen].bounds;
11
12     /** 新版本特性 */
13     // app现在的版本
14     // 由于使用的时Core Foundation的东西,需要桥接
15     NSString *versionKey = (__bridge NSString*) kCFBundleVersionKey;
16     NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
17     NSString *currentVersion = [infoDic objectForKey:versionKey];
18
19     // 上次使用的版本
20     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
21     NSString *lastVersion = [defaults stringForKey:versionKey];
22
23     // 如果版本变动了,存储新的版本号并启动新版本特性图
24     if (![lastVersion isEqualToString:currentVersion]) {
25
26         // 存储
27         [defaults setObject:currentVersion forKey:versionKey];
28         [defaults synchronize];
29
30         // 开启app显示新特性
31         HVWNewFeatureViewController *newFeatureVC = [[HVWNewFeatureViewController alloc] init];
32         self.window.rootViewController = newFeatureVC;
33     } else {
34         // 创建根控制器
35         HVWTabBarViewController *tabVC = [[HVWTabBarViewController alloc] init];
36         self.window.rootViewController = tabVC;
37     }
38
39     [self.window makeKeyAndVisible];
40
41     return YES;
42 }

B.版本新特性的内容

1.需求

  • 在特特性界面使用轮播方式显示若干个界面
  • 最后一个界面提供一个分享功能和进入app功能

2.思路

  • 在新特性控制器的view上加入一个全屏的scrollView

3.实现

  1 //
  2 //  HVWNewFeatureViewController.m
  3 //  HVWWeibo
  4 //
  5 //  Created by hellovoidworld on 15/2/3.
  6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
  7 //
  8
  9 #import "HVWNewFeatureViewController.h"
 10 #import "HVWTabBarViewController.h"
 11
 12 #define NewFeatureCount 4
 13
 14 @interface HVWNewFeatureViewController () <UIScrollViewDelegate>
 15
 16 @property(nonatomic, strong) UIPageControl *pageControl;
 17
 18 @end
 19
 20 @implementation HVWNewFeatureViewController
 21
 22 - (void)viewDidLoad {
 23     [super viewDidLoad];
 24     // Do any additional setup after loading the view.
 25
 26     // 添加scrollView
 27     [self setupScrollView];
 28
 29     // 添加pageControl
 30     [self setupPageControl];
 31 }
 32
 33 /** 添加scrollView */
 34 - (void) setupScrollView {
 35     // 创建一个scrollView
 36     UIScrollView *scrollView = [[UIScrollView alloc] init];
 37     scrollView.frame = self.view.bounds;
 38
 39     // 添加图片
 40     for (int i=0; i<NewFeatureCount; i++) {
 41
 42         // 获取图片
 43         NSString *featureImageName = [NSString stringWithFormat:@"new_feature_%d", i+1];
 44         UIImageView *featureImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithNamed:featureImageName]];
 45
 46         // 设置图片尺寸位置
 47         CGFloat featureWidth = self.view.width;
 48         CGFloat featureHeight = self.view.height;
 49         CGFloat featureX = featureImageView.width * i;
 50         CGFloat featureY = 0;
 51         featureImageView.frame = CGRectMake(featureX, featureY, featureWidth, featureHeight);
 52
 53         // 如果是最后一页,加上功能按钮
 54         if (i == (NewFeatureCount - 1)) {
 55             // 为了让最后一页的的功能按钮能够生效,必须激活交互功能
 56             featureImageView.userInteractionEnabled = YES;
 57
 58             [self addFunctionButton:featureImageView];
 59         }
 60
 61         // 添加图片到scrollView
 62         [scrollView addSubview:featureImageView];
 63     }
 64
 65     // 设置scrollView功能属性
 66     scrollView.userInteractionEnabled = YES;
 67     scrollView.scrollEnabled = YES; // 支持滚动
 68     scrollView.contentSize = CGSizeMake(self.view.width * NewFeatureCount, 0); // 只需要水平滚动
 69     scrollView.pagingEnabled = YES; // 支持分页
 70     scrollView.showsHorizontalScrollIndicator = NO; // 隐藏水平滚动条
 71
 72     // 设置背景色
 73     scrollView.backgroundColor = [UIColor colorWithRed:246/255.0 green:246/255.0 blue:246/255.0 alpha:1.0];
 74
 75     // 设置代理
 76     scrollView.delegate = self;
 77
 78     // 添加
 79     [self.view addSubview:scrollView];
 80 }
 81
 82 /** 添加pageControl */
 83 - (void) setupPageControl {
 84     // pageControl不能加在scrollView上,不然会随着内容一起滚动
 85     UIPageControl *pageControl = [[UIPageControl alloc] init];
 86     pageControl.pageIndicatorTintColor = [UIColor blackColor];
 87     pageControl.currentPageIndicatorTintColor = [UIColor redColor];
 88     pageControl.numberOfPages = NewFeatureCount;
 89
 90     // 设置位置
 91     pageControl.centerX = self.view.width * 0.5;
 92     pageControl.centerY = self.view.height * 0.9;
 93
 94
 95     self.pageControl = pageControl;
 96     [self.view addSubview:pageControl];
 97 }
 98
 99 #pragma mark - UIScrollViewDelegate
100 /** scrollView滚动代理方法,在这里控制页码指示器 */
101 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
102     // 四舍五入,让图片滚动超过中线的时候改变页码
103     self.pageControl.currentPage = scrollView.contentOffset.x / scrollView.width + 0.5;
104 }
105
106 #pragma mark - 最后一页的功能
107 /** 添加功能按钮 */
108 - (void) addFunctionButton:(UIImageView *) imageView {
109     // 添加"分享"选项按钮
110     [self addShareButton:imageView];
111
112     // 添加"进入微博"按钮
113     [self addEnterWeiboButton:imageView];
114 }
115
116 /** 分享选项按钮 */
117 - (void) addShareButton:(UIImageView *) imageView  {
118     // 创建按钮
119     UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
120
121     [shareButton setTitle:@"分享给大家" forState:UIControlStateNormal];
122
123     [shareButton setImage:[UIImage imageWithNamed:@"new_feature_share_false"] forState:UIControlStateNormal];
124     [shareButton setImage:[UIImage imageWithNamed:@"new_feature_share_true"] forState:UIControlStateSelected];
125
126
127     [shareButton addTarget:self action:@selector(shareButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
128
129     [shareButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
130
131     // 位置尺寸
132     shareButton.size = CGSizeMake(150, 50);
133
134     // 必须先设置了size,center才真的在中心,不然就是从左上角开始!!!
135     shareButton.centerX = self.view.width * 0.5;
136     shareButton.centerY = self.view.height * 0.65;
137
138     // 设置内间距
139     shareButton.titleEdgeInsets = UIEdgeInsetsMake(0, 10.0, 0, 0);
140
141     // 添加
142     [imageView addSubview:shareButton];
143 }
144
145 /** 分享选项点击事件方法 */
146 - (void) shareButtonClicked:(UIButton *) button {
147     button.selected = !button.selected;
148 }
149
150 /** “进入微博"按钮 */
151 - (void) addEnterWeiboButton:(UIImageView *) imageView  {
152     // 创建按钮
153     UIButton *enterButton = [UIButton buttonWithType:UIButtonTypeCustom];
154     enterButton.userInteractionEnabled = YES;
155     [enterButton setBackgroundImage:[UIImage imageWithNamed:@"new_feature_finish_button"] forState:UIControlStateNormal];
156     [enterButton setBackgroundImage:[UIImage imageWithNamed:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];
157     [enterButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
158     [enterButton setTitle:@"进入微博" forState:UIControlStateNormal];
159
160     // 位置尺寸
161     enterButton.size = enterButton.currentBackgroundImage.size;
162     enterButton.centerX = self.view.width * 0.5;
163     enterButton.centerY = self.view.height * 0.8;
164
165     // 监听点击
166     [enterButton addTarget:self action:@selector(enterWeiboButtonClicked) forControlEvents:UIControlEventTouchUpInside];
167
168     // 添加
169     [imageView addSubview:enterButton];
170 }
171
172 /** “进入微博” 按钮点击 */
173 - (void) enterWeiboButtonClicked {
174     UIWindow *window = [UIApplication sharedApplication].keyWindow;
175     window.rootViewController = [[HVWTabBarViewController alloc] init];
176 }
177
178 @end

时间: 2024-10-10 05:48:16

[iOS微博项目 - 1.7] - 版本新特性的相关文章

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

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

[iOS微博项目 - 2.1] - 获得新浪授权接口

A.如何获得新浪的授权接口 登陆新浪的开放平台 注册新浪账号 创建应用 获得应用id和请求地址 查阅相关API 关联需要进行测试的账号 1.登陆开放平台 http://open.weibo.com 2.注册账号 (略) 3.创建应用 4.填写开发者资料 5.创建应用 5.取得应用的App Key和App Secret B.新浪微博API 1.OAuth授权API 上面的redirect_uri也是必填参数,需要在"我的应用"管理页中填写 随便填一个就可以了,其实就是授权成功或者失败的跳

iOS开发 - 第05篇 - 项目 - 03 - 版本新特性 &amp; OAuth授权

1.版本新特性 1.1 界面 程序第一次启动的时候会弹出新特性界面,之后启动不会出现. 1.2 实现思路 1> 新建一个HWNewfeatureViewController(继承自UIViewController) 2> 先将其设置为整个程序的根控制器,用于演示 3> 使用UIScrollView 4>添加UIPageControl 5> 设置UIScrollView代理,监听滚动,设置UIPageControl 2.控制器切换 2.1 一个View中显示其他控制器的View

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. 自动生

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

快速集成版本新特性

一.框架声明:Charlin(成都)原创框架,欢迎star,fork.您的支持是对我的最大鼓励!使用方法及Github地址:https://github.com/nsdictionary/CoreNewFeatureVC 二.框架说明:框架特性:1.封装并简化了版本新特性启动视图!2.添加了版本的本地缓存功能3.集成简单,使用方便,没有耦合度4.支持block回调. 三.友情提示:Charlin(成都)更多原创项目(涵盖了方方面面,看看还有没有你需要的):首页:https://github.co

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