一、簡單說明
展示新版本的特性:第一次使用一些應用軟件時,展示這個版本的軟件的新特性,一般在第一次啟動程序的時候顯示。 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