一、簡單說明
展示新版本的特性:第一次使用一些應用軟件時,展示這個版本的軟件的新特性,一般在第一次啟動程序的時候顯示。
1.什麼情況下顯示版本新特性:
(1)第一次使用某個軟件時(X)
(2)第一次使用某個版本時,顯示版本新特性(V)
2.怎麼知道這個軟件的版本呢?
在plist文件裡,bundle version中顯示版本號。
3.如何顯示版本新特性?
應該在YYAppDelegate.m中進行判斷;
如果是第一次使用這個版本,那麼就顯示版本新特性(設置為window的根控制器),如果不是的話,那麼就顯示“首頁”的控制器。
新建一個控制器,使用UIScore來顯示新特性。
4.如何知道是第一次使用這個版本呢?
比較上次的使用情況。把每次使用的軟件的版本號存儲到沙盒中,當下一次打開軟件時,取出上一次保存的版本號,進行比較。
5.代碼示例:
YYAppDelegate.m文件中的處理代碼:
復制代碼
1 //
2 // YYAppDelegate.m
3 //
4
5 #import "YYAppDelegate.h"
6 #import "YYTabBarViewController.h"
7 #import "YYNewfeatureViewController.h"
8
9 @implementation YYAppDelegate
10
11 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
12 {
13
14 //1.創建窗口
15 self.window=[[UIWindow alloc]init];
16 self.window.frame=[UIScreen mainScreen].bounds;
17
18 //2.設置窗口的根控制器
19 //如何知道是否是第一次使用這個版本?可以通過比較上次使用的版本進行判斷
20 NSString *versionKey=@"CFBundleVersion";
21 versionKey=(__bridge NSString *)kCFBundleVersionKey;
22
23 //從沙盒中取出上次存儲的軟件版本號(取出用戶上次的使用記錄)
24 NSUserDefaults *defaults=[[NSUserDefaults alloc]init];
25 NSString *lastVersion=[defaults objectForKey:versionKey];
26
27 //獲得當前打開軟件的版本號
28 NSString *currentVersion=[NSBundle mainBundle].infoDictionary[versionKey];
29 if ([currentVersion isEqualToString:lastVersion]) {//當前版本號==上次使用的版本號
30 self.window.rootViewController=[[YYTabBarViewController alloc]init];
31 // self.window.rootViewController=[[YYNewfeatureViewController alloc]init];
32 }else{//當前版本號!=上次使用的版本號:顯示新版本的特性
33 self.window.rootViewController=[[YYNewfeatureViewController alloc]init];
34 //存儲這個使用的軟件版本
35 [defaults setObject:currentVersion forKey:versionKey];
36 //立刻寫入
37 [defaults synchronize];
38 }
39
40 //3.顯示窗口(主窗口)
41 [self.window makeKeyAndVisible];
42 return YES;
43 }
復制代碼
代碼說明:
(1)比較大小,不能轉浮點數,其實只要比較字符串不一樣就是新的了。
(2)bundle version在Xcode中的真實類型為CFbundeVersion。
(3)Foundation和core foundation的數據類型是可以相互轉換的,在兩個框架之間比較安全的轉換是橋接轉換。
復制代碼
1 NSString *text = @"啊哈哈哈哈";
2
3 CFStringRef str = (__bridge CFStringRef)text;
4
5 NSString\NSArray\NSDictionary : Foundaiton
6
7 CFStringRef\CFArrayRef\CFDictionaryRef : Core Foundation
8
9 // Foundation和Core Foundation的數據類型是可以相互轉換的,必須用__bridge關鍵字進行橋接轉換
復制代碼
二、新建一個展示新版本特性的控制器
1.導入圖片素材
2.新建一個控制器類
3.實現代碼
YYNewfeatureViewController.m文件
復制代碼
1 //
2 // YYNewfeatureViewController.m
3 //
4
5 #import "YYNewfeatureViewController.h"
6 #define YYNewfeatureImageCount 4
7 @interface YYNewfeatureViewController ()<UIScrollViewDelegate>
8 @property(nonatomic,strong)UIPageControl *pageControl;
9
10 @end
11
12 @implementation YYNewfeatureViewController
13
14
15 - (void)viewDidLoad
16 {
17 [super viewDidLoad];
18 //1.添加UIScrollView
19 [self setupScrollView];
20 //2.添加pageControl
21 [self setupPageControl];
22 }
23 /**
24 *添加UIScrollVie
25 */
26 -(void)setupScrollView
27 {
28 //1.添加UIScrollVie
29 //創建
30 UIScrollView *scrollView=[[UIScrollView alloc]init];
31 //設置frame
32 scrollView.frame=self.view.bounds;
33 //設置代理
34 scrollView.delegate=self;
35 //添加到view
36 [self.view addSubview:scrollView];
37
38 //2.添加圖片
39 //設置每張圖片的寬高和scrollView的一致
40 CGFloat imageW=scrollView.width;
41 CGFloat imageH=scrollView.height;
42 //添加四張圖片
43 for (int i=0; i<YYNewfeatureImageCount; i++) {
44 //創建ImageView
45 UIImageView *imageView=[[UIImageView alloc]init];
46 NSString *name=[NSString stringWithFormat:@"new_feature_%d",i+1];
47 // if ([UIScreen mainScreen].bounds.size.height==568.0) {
48 // name=[name stringByAppendingString:@"-568h"];
49 // }
50 if (FourInch) {//需要手動去加載4英寸對應的-568h@2x圖片
51 name=[name stringByAppendingString:@"-568h"];
52 }
53 imageView.image=[UIImage imageWithName:name];
54
55 //把ImageView添加到scrollView上
56 [scrollView addSubview:imageView];
57
58 //設置imageView的frame
59 imageView.y=0;
60 imageView.width=imageW;
61 imageView.height=imageH;
62 imageView.x=i*imageW;
63 }
64 //設置其他的屬性
65 //設置活動范圍
66 scrollView.contentSize=CGSizeMake(YYNewfeatureImageCount*imageW, 0);
67 //設置背景顏色
68 scrollView.backgroundColor=YYColor(246, 246, 246);
69 //隱藏水平滾動條
70 scrollView.showsHorizontalScrollIndicator=NO;
71 // scrollView.pagingEnabled=YES;
72 //去除彈簧效果
73 scrollView.bounces=NO;
74 }
75
76 /**
77 *2.添加pageControl
78 */
79 -(void)setupPageControl
80 {
81 UIPageControl *pageControl=[[UIPageControl alloc]init];
82 //設置一共有幾頁
83 pageControl.numberOfPages=YYNewfeatureImageCount;
84 //設置顯示的位置
85 pageControl.centerX=self.view.width*0.5;
86 pageControl.centerY=self.view.height-30;
87 //把pageControl添加到view上
88 [self.view addSubview:pageControl];
89
90 //設置圓點的顏色
91 //當前頁的圓點的顏色
92 pageControl.currentPageIndicatorTintColor=YYColor(253, 98, 42);
93 //其它葉的圓點的顏色
94 pageControl.pageIndicatorTintColor=YYColor(189, 189, 189);
95 self.pageControl=pageControl;
96
97 }
98 #pragma mark-UIScrollViewDelegate
99 -(void)scrollViewDidScroll:(UIScrollView *)scrollView
100 {
101 // YYLog(@"scrollViewDidScroll----%f",scrollView.contentOffset.x);
102 //拿到浮點數進行四捨五入
103 double doublePage=scrollView.contentOffset.x/scrollView.width;
104 int intPage=(int)(doublePage + 0.5);
105 //設置當前頁碼
106 self.pageControl.currentPage=intPage;
107
108 }
109 #pragma mark-隱藏狀態欄
110 -(BOOL)prefersStatusBarHidden
111 {
112 return YES;
113 }
114 @end
復制代碼
4.實現細節
(1)設置活動范圍 scrollView.contentSize=CGSizeMake(YYNewfeatureImageCount*imageW, 0);
(2)設置背景顏色 scrollView.backgroundColor=YYColor(246, 246, 246);
(3)隱藏水平滾動條 scrollView.showsHorizontalScrollIndicator=NO;
(4)去除彈簧效果scrollView.bounces=NO;
(5)補充:在pch文件中得宏定義
復制代碼
1 //
2 // Prefix header
3 //
4 // The contents of this file are implicitly included at the beginning of every source file.
5 //
6
7 #import <Availability.h>
8
9 #ifndef __IPHONE_5_0
10 #warning "This project uses features only available in iOS SDK 5.0 and later."
11 #endif
12
13 #ifdef __OBJC__
14 #import <UIKit/UIKit.h>
15 #import <Foundation/Foundation.h>
16 #import "UIImage+Extension.h"
17 #import "UIBarButtonItem+Extension.h"
18 #import "UIView+Extension.h"
19
20 #ifdef DEBUG // 調試狀態, 打開LOG功能
21 #define YYLog(...) NSLog(__VA_ARGS__)
22 #else // 發布狀態, 關閉LOG功能
23 #define YYLog(...)
24 #endif
25
26 // 顏色
27 #define YYColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
28
29 // 隨機色
30 #define YYRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
31
32 // 是否為iOS7
33 #define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)
34
35 //是否為4英寸
36 #define FourInch ([UIScreen mainScreen].bounds.size.height==568.0)
37 #endif