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

目录
相关文章
|
2天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!
|
5天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第28天】在这篇技术性文章中,我们将一起踏上一段探索iOS开发的旅程。无论你是刚入门的新手,还是希望提升技能的开发者,这篇文章都将为你提供宝贵的指导和灵感。我们将从基础概念开始,逐步深入到高级主题,如设计模式、性能优化等。通过阅读这篇文章,你将获得一个清晰的学习路径,帮助你在iOS开发领域不断成长。
28 2
|
11天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
2天前
|
移动开发 Java Android开发
探索Android与iOS开发的差异性与互联性
【10月更文挑战第32天】在移动开发的大潮中,Android和iOS两大平台各领风骚。本文将深入浅出地探讨这两个平台的开发差异,并通过实际代码示例,展示如何在各自平台上实现相似的功能。我们将从开发环境、编程语言、用户界面设计、性能优化等多个角度进行对比分析,旨在为开发者提供跨平台开发的实用指南。
18 0
|
iOS开发
iOS 开始页面实现
* 我们从AppStore里面下载软件的时候,当我们第一次打开的时候总会有一个内容介绍页面(如下图我之前做的这个项目的丑陋的介绍页,卧槽,Boss说漂亮,真TMD怀疑他的审美!哎,创业公司,众多不易),随后再打开就没有了,下面我就给大家分享一下怎样实现该功能* * 其实实现的原理很简单,就是本地沙盒保存的版本号跟Info.plist文件里面的版本号进行对比,不一致就说明新安装的或者更新了新版本。
589 0
|
30天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
98 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
61 1
|
2月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
2月前
|
开发框架 数据可视化 Java
iOS开发-SwiftUI简介
iOS开发-SwiftUI简介