iOS開發實用技巧篇—項目新特性頁面的處理
ide
說明:本文主要說明在項目開發中會涉及到的最最簡單的新特性界面(實用UIScrollView展現多張圖片的輪播)的處理。atom
代碼示例:spa
新建一個專門的處理新特性界面的控制器,能夠實用代碼也能夠用xib,在這裏實用純代碼方式,建立一個控制器NewfeatureViewController。code
頭文件代碼:orm
1 // 2 // JMNewfeatureViewController.h 3 // 4 5 #import <UIKit/UIKit.h> 6 7 typedef enum:NSInteger 8 { 9 NewfeatureTypeFromeSetting, //從設置界面進入該頁 10 NewfeatureTypeFromeWelcom, //第一次安裝的時候進入 11 } NewfeatureType; 12 13 @interface JMNewfeatureViewController : UIViewController 14 15 @property(nonatomic,assign)NewfeatureType newfeatureType; 16 17 @end
.m文件代碼:blog
1 // 2 // JMNewfeatureViewController.m 3 // 4 5 #import "JMNewfeatureViewController.h" 6 #import "JMTabBarViewController.h" 7 #import "JMAboutTableViewController.h" 8 9 #define JMNewfeatureImageCount 4 10 11 @interface JMNewfeatureViewController () <UIScrollViewDelegate> 12 13 @property (nonatomic, weak) UIPageControl *pageControl; 14 15 16 - (void)setupScrollView; 17 - (void)setupPageControl; 18 - (void)setupLastImageView:(UIImageView *)imageView; 19 - (void)setupStartButton:(UIImageView *)imageView; 20 21 @end 22 23 @implementation JMNewfeatureViewController 24 25 #pragma mark --------------------- 26 #pragma mark - CycLife 27 28 - (void)viewDidLoad 29 { 30 [super viewDidLoad]; 31 32 [UIApplication sharedApplication].statusBarHidden = YES; 33 34 [self setupScrollView]; // 添加UISrollView 35 [self setupPageControl]; // 添加pageControl 36 } 37 38 #pragma mark --------------------- 39 #pragma mark - Methods 40 41 //添加UISrollView 42 - (void)setupScrollView 43 { 44 // 添加UISrollView 45 UIScrollView *scrollView = [[UIScrollView alloc] init]; 46 scrollView.frame = self.view.bounds; 47 scrollView.bounces = NO; 48 scrollView.delegate = self; 49 [self.view addSubview:scrollView]; 50 51 // 添加圖片 52 CGFloat imageW = scrollView.width; 53 CGFloat imageH = scrollView.height; 54 for (int i = 0; i<JMNewfeatureImageCount; i++) { 55 // 建立UIImageView 56 UIImageView *imageView = [[UIImageView alloc] init]; 57 NSString *name = [NSString stringWithFormat:@"banner%d.jpg", i + 1]; 58 imageView.image = [UIImage imageNamed:name]; 59 [scrollView addSubview:imageView]; 60 61 // 設置frame 62 imageView.y = 0; 63 imageView.width = imageW; 64 imageView.height = imageH; 65 imageView.x = i * imageW; 66 67 // 給最後一個imageView添加按鈕 68 if (i == JMNewfeatureImageCount - 1) { 69 [self setupLastImageView:imageView]; 70 } 71 } 72 73 // 3.設置其餘屬性 74 scrollView.contentSize = CGSizeMake(JMNewfeatureImageCount * imageW, 0); 75 scrollView.pagingEnabled = YES; 76 scrollView.showsHorizontalScrollIndicator = NO; 77 scrollView.backgroundColor = YYColor(246, 246, 246); 78 } 79 80 //添加pageControl 81 - (void)setupPageControl 82 { 83 // 添加PageControl 84 UIPageControl *pageControl = [[UIPageControl alloc] init]; 85 pageControl.numberOfPages = JMNewfeatureImageCount; 86 pageControl.centerX = self.view.width * 0.5; 87 pageControl.centerY = self.view.height - 20; 88 [self.view addSubview:pageControl]; 89 90 // 設置圓點的顏色 91 self.pageControl = pageControl; 92 [self changePageControlImage:self.pageControl]; 93 } 94 95 96 //設置最後一個UIImageView中的內容 97 - (void)setupLastImageView:(UIImageView *)imageView 98 { 99 imageView.userInteractionEnabled = YES; 100 101 // 添加開始按鈕 102 [self setupStartButton:imageView]; 103 } 104 105 //添加開始按鈕 106 - (void)setupStartButton:(UIImageView *)imageView 107 { 108 // 1.添加開始按鈕 109 UIButton *startButton = [[UIButton alloc] init]; 110 imageView.userInteractionEnabled = YES; 111 [imageView addSubview:startButton]; 112 113 // 2.設置背景圖片 114 [startButton setBackgroundImage:[UIImage imageNamed:@"banner_button_moren.jpg"] forState:UIControlStateNormal]; 115 [startButton setBackgroundImage:[UIImage imageNamed:@"banner_button_dianji.jpg"] forState:UIControlStateHighlighted]; 116 117 // 3.設置frame 118 startButton.size = startButton.currentBackgroundImage.size; 119 startButton.centerX = self.view.width * 0.5; 120 startButton.centerY = self.view.height * 0.8; 121 122 // 4.設置文字 123 [startButton setTitle:@"當即體驗" forState:UIControlStateNormal]; 124 [startButton setTitle:@"" forState:UIControlStateHighlighted]; 125 [startButton addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside]; 126 } 127 128 129 //改變pagecontrol中圓點樣式 130 - (void)changePageControlImage:(UIPageControl *)pageControl 131 { 132 static UIImage *imgCurrent = nil; 133 static UIImage *imgOther = nil; 134 static dispatch_once_t onceToken; 135 136 dispatch_once(&onceToken, ^{ 137 imgCurrent = [UIImage imageNamed:@"yuan_01"]; 138 imgOther = [UIImage imageNamed:@"yuan1"]; 139 }); 140 141 142 if (kSystemVersionMoreThan7) { 143 [pageControl setValue:imgCurrent forKey:@"_currentPageImage"]; 144 [pageControl setValue:imgOther forKey:@"_pageImage"]; 145 } else { 146 for (int i = 0;i < pageControl.numberOfPages; i++) { 147 UIImageView *imgv = [pageControl.subviews objectAtIndex:i]; 148 imgv.frame = CGRectMake(imgv.frame.origin.x, imgv.frame.origin.y, 20, 20); 149 imgv.image = pageControl.currentPage == i ? imgCurrent : imgOther; 150 } 151 } 152 } 153 154 #pragma mark --------------------- 155 #pragma mark - Events 156 157 //當即體驗 158 - (void)start 159 { 160 [UIApplication sharedApplication].statusBarHidden = NO; 161 162 //判斷類型 163 if (self.newfeatureType == NewfeatureTypeFromeWelcom) { 164 JMTabBarViewController *tabVC = [[JMTabBarViewController alloc]init]; 165 // 切換控制器 166 UIWindow *window = [UIApplication sharedApplication].keyWindow; 167 window.rootViewController = tabVC; 168 }else 169 { 170 171 [self.navigationController popViewControllerAnimated:YES]; 172 [self.navigationController setNavigationBarHidden:NO animated:NO]; 173 } 174 175 } 176 177 #pragma mark - UIScrollViewDelegate 178 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 179 { 180 // 得到頁碼 181 CGFloat doublePage = scrollView.contentOffset.x / scrollView.width; 182 int intPage = (int)(doublePage + 0.5); 183 184 // 設置頁碼 185 self.pageControl.currentPage = intPage; 186 [self changePageControlImage:self.pageControl]; 187 } 188 189 @end
注意點:圖片
下面的方法能夠爲pageControl提供當前狀態和默認狀態下的圖片設置。開發
1 //改變pagecontrol中圓點樣式 2 - (void)changePageControlImage:(UIPageControl *)pageControl 3 { 4 static UIImage *imgCurrent = nil; 5 static UIImage *imgOther = nil; 6 static dispatch_once_t onceToken; 7 8 dispatch_once(&onceToken, ^{ 9 imgCurrent = [UIImage imageNamed:@"yuan_01"]; 10 imgOther = [UIImage imageNamed:@"yuan1"]; 11 }); 12 13 14 if (kSystemVersionMoreThan7) { 15 [pageControl setValue:imgCurrent forKey:@"_currentPageImage"]; 16 [pageControl setValue:imgOther forKey:@"_pageImage"]; 17 } else { 18 for (int i = 0;i < pageControl.numberOfPages; i++) { 19 UIImageView *imgv = [pageControl.subviews objectAtIndex:i]; 20 imgv.frame = CGRectMake(imgv.frame.origin.x, imgv.frame.origin.y, 20, 20); 21 imgv.image = pageControl.currentPage == i ? imgCurrent : imgOther; 22 } 23 } 24 }
本例中,新特性部分的業務邏輯很是簡單,能夠直接套用。get
實用圖片替換pageControl的效果以下:string