iOS开发实用技巧篇—项目新特性页面的处理

说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理。

代码示例:

新建一个专门的处理新特性界面的控制器,可以实用代码也可以用xib,在这里实用纯代码方式,创建一个控制器NewfeatureViewController。

头文件代码:

 //
// JMNewfeatureViewController.h
// #import <UIKit/UIKit.h> typedef enum:NSInteger
{
NewfeatureTypeFromeSetting, //从设置界面进入该页
NewfeatureTypeFromeWelcom, //第一次安装的时候进入
} NewfeatureType; @interface JMNewfeatureViewController : UIViewController @property(nonatomic,assign)NewfeatureType newfeatureType; @end

.m文件代码:

 //
// JMNewfeatureViewController.m
// #import "JMNewfeatureViewController.h"
#import "JMTabBarViewController.h"
#import "JMAboutTableViewController.h" #define JMNewfeatureImageCount 4 @interface JMNewfeatureViewController () <UIScrollViewDelegate> @property (nonatomic, weak) UIPageControl *pageControl; - (void)setupScrollView;
- (void)setupPageControl;
- (void)setupLastImageView:(UIImageView *)imageView;
- (void)setupStartButton:(UIImageView *)imageView; @end @implementation JMNewfeatureViewController #pragma mark ---------------------
#pragma mark - CycLife - (void)viewDidLoad
{
[super viewDidLoad]; [UIApplication sharedApplication].statusBarHidden = YES; [self setupScrollView]; // 添加UISrollView
[self setupPageControl]; // 添加pageControl
} #pragma mark ---------------------
#pragma mark - Methods //添加UISrollView
- (void)setupScrollView
{
// 添加UISrollView
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.frame = self.view.bounds;
scrollView.bounces = NO;
scrollView.delegate = self;
[self.view addSubview:scrollView]; // 添加图片
CGFloat imageW = scrollView.width;
CGFloat imageH = scrollView.height;
for (int i = ; i<JMNewfeatureImageCount; i++) {
// 创建UIImageView
UIImageView *imageView = [[UIImageView alloc] init];
NSString *name = [NSString stringWithFormat:@"banner%d.jpg", i + ];
imageView.image = [UIImage imageNamed:name];
[scrollView addSubview:imageView]; // 设置frame
imageView.y = ;
imageView.width = imageW;
imageView.height = imageH;
imageView.x = i * imageW; // 给最后一个imageView添加按钮
if (i == JMNewfeatureImageCount - ) {
[self setupLastImageView:imageView];
}
} // 3.设置其他属性
scrollView.contentSize = CGSizeMake(JMNewfeatureImageCount * imageW, );
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.backgroundColor = YYColor(, , );
} //添加pageControl
- (void)setupPageControl
{
// 添加PageControl
UIPageControl *pageControl = [[UIPageControl alloc] init];
pageControl.numberOfPages = JMNewfeatureImageCount;
pageControl.centerX = self.view.width * 0.5;
pageControl.centerY = self.view.height - ;
[self.view addSubview:pageControl]; // 设置圆点的颜色
self.pageControl = pageControl;
[self changePageControlImage:self.pageControl];
} //设置最后一个UIImageView中的内容
- (void)setupLastImageView:(UIImageView *)imageView
{
imageView.userInteractionEnabled = YES; // 添加开始按钮
[self setupStartButton:imageView];
} //添加开始按钮
- (void)setupStartButton:(UIImageView *)imageView
{
// 1.添加开始按钮
UIButton *startButton = [[UIButton alloc] init];
imageView.userInteractionEnabled = YES;
[imageView addSubview:startButton]; // 2.设置背景图片
[startButton setBackgroundImage:[UIImage imageNamed:@"banner_button_moren.jpg"] forState:UIControlStateNormal];
[startButton setBackgroundImage:[UIImage imageNamed:@"banner_button_dianji.jpg"] forState:UIControlStateHighlighted]; // 3.设置frame
startButton.size = startButton.currentBackgroundImage.size;
startButton.centerX = self.view.width * 0.5;
startButton.centerY = self.view.height * 0.8; // 4.设置文字
[startButton setTitle:@"立即体验" forState:UIControlStateNormal];
[startButton setTitle:@"" forState:UIControlStateHighlighted];
[startButton addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];
} //改变pagecontrol中圆点样式
- (void)changePageControlImage:(UIPageControl *)pageControl
{
static UIImage *imgCurrent = nil;
static UIImage *imgOther = nil;
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{
imgCurrent = [UIImage imageNamed:@"yuan_01"];
imgOther = [UIImage imageNamed:@"yuan1"];
}); if (kSystemVersionMoreThan7) {
[pageControl setValue:imgCurrent forKey:@"_currentPageImage"];
[pageControl setValue:imgOther forKey:@"_pageImage"];
} else {
for (int i = ;i < pageControl.numberOfPages; i++) {
UIImageView *imgv = [pageControl.subviews objectAtIndex:i];
imgv.frame = CGRectMake(imgv.frame.origin.x, imgv.frame.origin.y, , );
imgv.image = pageControl.currentPage == i ? imgCurrent : imgOther;
}
}
} #pragma mark ---------------------
#pragma mark - Events //立即体验
- (void)start
{
[UIApplication sharedApplication].statusBarHidden = NO; //判断类型
if (self.newfeatureType == NewfeatureTypeFromeWelcom) {
JMTabBarViewController *tabVC = [[JMTabBarViewController alloc]init];
// 切换控制器
UIWindow *window = [UIApplication sharedApplication].keyWindow;
window.rootViewController = tabVC;
}else
{ [self.navigationController popViewControllerAnimated:YES];
[self.navigationController setNavigationBarHidden:NO animated:NO];
} } #pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 获得页码
CGFloat doublePage = scrollView.contentOffset.x / scrollView.width;
int intPage = (int)(doublePage + 0.5); // 设置页码
self.pageControl.currentPage = intPage;
[self changePageControlImage:self.pageControl];
} @end

注意点:

  下面的方法可以为pageControl提供当前状态和默认状态下的图片设置。

 //改变pagecontrol中圆点样式
- (void)changePageControlImage:(UIPageControl *)pageControl
{
static UIImage *imgCurrent = nil;
static UIImage *imgOther = nil;
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{
imgCurrent = [UIImage imageNamed:@"yuan_01"];
imgOther = [UIImage imageNamed:@"yuan1"];
}); if (kSystemVersionMoreThan7) {
[pageControl setValue:imgCurrent forKey:@"_currentPageImage"];
[pageControl setValue:imgOther forKey:@"_pageImage"];
} else {
for (int i = ;i < pageControl.numberOfPages; i++) {
UIImageView *imgv = [pageControl.subviews objectAtIndex:i];
imgv.frame = CGRectMake(imgv.frame.origin.x, imgv.frame.origin.y, , );
imgv.image = pageControl.currentPage == i ? imgCurrent : imgOther;
}
}
}

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

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

  

iOS开发实用技巧—项目新特性页面的处理的更多相关文章

  1. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

    iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...

  2. iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示

    iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端.  打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面.   ...

  3. iOS中的项目新特性页面的处理

    一般项目中都会出现新特性页面,比如第一次使用应用的时候,或者在应用设置里查看新特性的时候会出现. 这里,选择新建一个专门处理项目新特性的控制器,来完成功能. 首先是 NewFeaturesViewCo ...

  4. 最新iOS 6 in Xcode4.5新特性——Storyboard和属性自动绑定

    最新iOS 6 in Xcode4.5新特性编程之二(上)——Storyboard和属性自动绑定 从Xcode 4.3开始,Storyboard 就是iOS 5和iOS 6中令人兴奋的一个新特性,他将 ...

  5. iOS开发小技巧 - runtime适配字体

    iOS开发小技巧 - runtime适配字体 版权声明:本文为博主原创文章,未经博主允许不得转载,有问题可联系博主Email: liuyongjiesail@icloud.com 一个iOS开发项目无 ...

  6. iOS开发小技巧 - UILabel添加中划线

    iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...

  7. iOS开发--常用技巧 (MJRefresh详解)

         iOS开发--常用技巧 (MJRefresh详解) https://github.com/CoderMJLee/MJRefresh 下拉刷新01-默认 self.tableView.head ...

  8. iOS之Xcode8 Auto Layout新特性

    目录 1.Incrementally Adopting Auto Layout 2.Design and Runtime Constraints 3.NSGridView 4.Layout Feedb ...

  9. iOS 开发调试技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

随机推荐

  1. C语言实现粒子群算法(PSO)一

    最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...

  2. jQuery应用之(二)使用jQuery管理选择结果(荐)

    使用jQuery选择出来的元素与数组非常类似,可以通过jQuery提供的一系列方法对其进行处理,包括长度.查找某个元素,截取某个段落等. 1.获取元素的个数. 在jQuery中可以通过size()方法 ...

  3. 时间TDateTime相当于是Double,即双精度数64位,终于查到它用11位表示e,53位表示精度(整数小数一起),最前面一位表示正负

    http://docwiki.embarcadero.com/RADStudio/Seattle/en/Internal_Data_Formats 关于Double的RTL函数,好像就一个:TrySt ...

  4. UVa 121 - Pipe Fitters

    称号:放置在一个圆中的矩形,它要求每个圆的每行或列是切线,问:多少能竖起来. 分析:计算几何.数论.首先计算矩形显示屏,然后计算互显示器(每一行与相邻行相同差1个月)求最大,你可以. 说明:╮(╯▽╰ ...

  5. Target runtime Apache Tomcat v8.0 is not defined.

    Target runtime Apache Tomcat v8.0 is not defined. Window-Preference-MyEclipse-Targeted Runtimes,选择存在 ...

  6. React Native在特赞的应用与实践

    基于React技术栈构建开发前端项目,并使用React Native开发特赞移动APP 目前正在使用Node.js开发和维护特赞服务网关,希望Node.js能够在更轻量级的微服务架构中发挥重要作用 课 ...

  7. HTML入门标签学习

    1.标题:<h1></h1>.<h2></h2>.<h3></h3>.<h4></h4>.<h5& ...

  8. puppet 横向扩展(二)

    Table of Contents 1. 概述 2. 实验环境 3. 实验步骤 3.1. 机器B 的环境 3.1.1. 安装puppetmaster 以及 apache passenger 3.1.2 ...

  9. k8s学习笔记之四:资源清单定义入门

    第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...

  10. 目标检测的图像特征提取之(一)HOG特征(转)

    看过很多介绍HOG的博文,讲的最清楚的是这位博主:http://blog.csdn.net/zouxy09/article/details/7929348 代码如下: #include <ope ...