文档章节

轮播图

z
 zwl1989
发布于 2016/04/28 13:56
字数 984
阅读 4
收藏 0

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 }
复制代码

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

本文转载自:http://blog.csdn.net/zwl492454828/article/details/50432650

z
粉丝 1
博文 53
码字总数 0
作品 0
西安
私信 提问
关于图片轮播图的一个简单实例 以及实例中发现问题

1.最近在学习JS的过程中,为了巩固水平做了一个简单的轮播图,以及在做的过程中发现一些问题(未解决!希望可以有大佬可以解释这个问题) 2.代码如下:

前端二弟
2018/05/17
0
0
写一个轮播图,学会 React Native

我学习 Web 的第一课,就是学习写一个轮播图,在写轮播图时自然地将 html、css、js、DOM、组件设计等各方面简单的知识点给串起来了。学习 React Native 的时候,也自然用起了这个思路,挺好用...

穿越过来的键盘手
2018/07/10
0
0
Rxjava + ViewPager 打造实用图片轮播

背景 说到图片轮播,之前写过一篇文章《造轮子:android自定义专属广告轮播控件》,不过当时是采用ViewFlipper实现图片轮播的,最近开始研究Rxjava技术,发现有个interval的方法,觉得很实用,...

码无止境
2016/09/22
0
0
如何实现一个无限循环的轮播图

前言 由于项目中使用第三方的轮播图出现了崩溃情况,同时也想减少项目的依赖性,所以想自己实现一个轮播图。实现这样一个轮播图,可以使用或者,当然实现起来更容易一些。 原理 实现一个无限...

_誌念
2017/11/24
0
0
解决在使用CSS3制作不间断轮播图中 收尾连接后Interval 延时问题

问题:使用CSS3制作不间断轮播图中 原理就是克隆一个首个轮播图在整个轮播图的尾部,尾部播放放以后继续播放克隆的首部块,然后在把真整个块拉回原来的位置 继续播放。 其中涉及到的一个体验...

eleplant_php
2018/07/04
93
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
2.1K
20
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
8
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
11
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
19
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部