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 : UIViewController
14 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 *)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 }
复制代码

本例中,新特性部分的业务逻辑非常简单,可以直接套用。

实用图片替换pageControl的效果如下:

目录
相关文章
|
4天前
|
开发工具 Android开发 iOS开发
探索Android与iOS开发的差异与挑战
【7月更文挑战第11天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星座般耀眼,各自拥有独特的开发生态和用户群体。本文将深入分析这两个平台的显著差异,从技术架构到开发工具,再到市场定位,揭示它们之间的异同。通过比较,我们不仅能够更好地理解各自的优势和局限,还能洞察未来移动应用开发的趋势。
|
2天前
|
前端开发 开发工具 Swift
学习iOS开发的准备
准备学习iOS开发?确保有Mac和最新Xcode,先学好编程基础特别是Swift。利用Apple官方文档、在线课程和书籍作为资源。熟悉Xcode及Git,通过实践项目和开源代码积累经验。深研架构模式、核心框架和优化技巧。加入开发者社区,关注行业动态,持续学习。
14 1
|
4天前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异与挑战
【7月更文挑战第11天】在移动应用开发的广阔天地中,Android和iOS两大平台各领风骚。本文将深入探讨这两个平台的开发差异,从编程语言、用户界面设计到开发工具等方面进行比较,并分析开发者面临的挑战。通过对比分析,旨在为开发者提供一个全面的视角,帮助他们更好地选择适合自己项目需求的开发平台。
8 0
|
4天前
|
iOS开发 开发者 UED
探索iOS开发中的SwiftUI框架
【7月更文挑战第11天】本文将深入探讨SwiftUI框架,这是苹果公司为iOS开发者提供的一个现代化、声明式的用户界面工具。我们将了解SwiftUI如何简化界面设计流程,提升代码的可读性和可维护性,并讨论其在实际应用中的优势和局限性。通过实际案例分析,本文旨在帮助读者更好地理解SwiftUI的核心概念和应用实践。
|
5天前
|
机器学习/深度学习 人工智能 iOS开发
探索iOS开发的未来:SwiftUI的革新之旅
在数字时代的浪潮中,iOS开发正经历一场由SwiftUI引领的变革。本文将深入探讨SwiftUI如何重塑移动应用开发,提升开发者的生产力,并展望其对iOS生态的影响。通过分析SwiftUI的核心特性、实际案例和未来趋势,我们将揭示这一现代框架如何定义用户体验的新标准,同时为iOS开发者指明技术进阶之路。
|
容器
iOS11新特性:新增拖拽交互体验(三)
iOS11新特性:新增拖拽交互体验
491 0
iOS11新特性:新增拖拽交互体验(三)
|
iOS开发 开发者
iOS11新特性:新增拖拽交互体验(一)
iOS11新特性:新增拖拽交互体验
478 0
iOS11新特性:新增拖拽交互体验(一)
|
iOS开发
iOS11新特性:新增拖拽交互体验(二)
iOS11新特性:新增拖拽交互体验
450 0
|
17天前
|
安全 Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的深度对比
在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。本文旨在通过数据驱动的分析方法,深入探讨这两大操作系统在开发环境、用户界面设计及市场表现等方面的差异。引用最新的行业报告和科研数据,结合技术专家的观点,本文将提供对开发者和市场分析师均有价值的洞见。
|
7天前
|
Java Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【7月更文挑战第8天】在移动应用开发的广阔天地中,Android与iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发环境、用户界面设计、性能优化以及市场覆盖等方面的根本差异,并分析这些差异如何影响项目的成功。通过比较和分析,旨在为开发者在选择平台时提供更全面的视角,帮助他们根据项目需求和目标市场做出更明智的决策。