首页 > 代码库 > iOS开发实用技巧—项目新特性页面的处理
iOS开发实用技巧—项目新特性页面的处理
iOS开发实用技巧篇—项目新特性页面的处理
说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理。
代码示例:
新建一个专门的处理新特性界面的控制器,可以实用代码也可以用xib,在这里实用纯代码方式,创建一个控制器NewfeatureViewController。
头文件代码:
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 : UIViewController14 15 @property(nonatomic,assign)NewfeatureType newfeatureType;16 17 @end
.m文件代码:
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 *)imageView107 {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.设置frame118 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 *)pageControl131 {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 - Events156 157 //立即体验158 - (void)start159 {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 - UIScrollViewDelegate178 - (void)scrollViewDidScroll:(UIScrollView *)scrollView179 {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 }
本例中,新特性部分的业务逻辑非常简单,可以直接套用。
实用图片替换pageControl的效果如下:
iOS开发实用技巧—项目新特性页面的处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。