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的效果如下:

目录
相关文章
|
9天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
91 66
|
19天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
23天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
25天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
1月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
28天前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
32 2
|
1月前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
53 9
|
1月前
|
vr&ar Android开发 iOS开发
安卓与iOS开发中的用户界面设计原则
【10月更文挑战第41天】探索移动应用开发的精髓,本文将深入分析安卓和iOS平台上用户界面设计的核心原则。通过比较两大操作系统的设计哲学,我们将揭示如何打造直观、易用且美观的应用程序界面。无论你是初学者还是资深开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你在竞争激烈的应用市场中脱颖而出。
|
1月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!