1、前面两章讲的都是基本的用法,这次讲一下比较重要的功能分页和自动播放

2、UIPageControl--分页

2.1只要将UIScrollView的pageEnabled属性设置为YES,UIScrollView会被分割成多个独立页面,里面的内容就能进行分页展示,一般会配合UIPageControl增强分页效果,UIPageControl常用属性如下

1)一共有多少页

@property(nonatomic) NSInteger numberOfPages;

2)当前显示的页码

@property(nonatomic) NSInteger currentPage;

3)只有一页时,是否需要隐藏页码指示器

@property(nonatomic) BOOL hidesForSinglePage;

4)其他页码指示器的颜色

@property(nonatomic,retain) UIColor *pageIndicatorTintColor;

5)当前页码指示器的颜色

@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;

3、NSTimer

3.1、NSTimer叫做“定时器”,它的作用如下:

1)在指定的时间执行指定的任务

2)每隔一段时间执行指定的任务

3.2、调用下面的方法就会开启一个定时任务

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget

selector:(SEL)aSelector

userInfo:(id)userInfo

repeats:(BOOL)yesOrNo;

每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务

3.3、通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务

- (void)invalidate;

4、大体思路:

在前面+最后一张,在最后面+第一张,也就是说如果你有三张图片的话在第0个位置放最后一张,在第4个位置放第一张,总共的contentsize是imageNum+ 2。

代码如下:

 - (void)viewDidLoad {
[super viewDidLoad];
//初始化scrollView
[self setupScrollView];
//初始化pageControl
[self setupPageControl];
}
- (void)setupScrollView
{
_fzhScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(, , SCREEN_WIDTH, )]; _fzhScrollView.contentSize = CGSizeMake(SCREEN_WIDTH * (imageNum +) , ); for (int i = ; i<imageNum + ; i++) {
UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(i * SCREEN_WIDTH, , SCREEN_WIDTH, )];
if (i == ) {
imageView.image = [UIImage imageNamed:@"3.jpg"];
}else if (i == imageNum + ){
imageView.image = [UIImage imageNamed:@"1.jpg"];
}else{
imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]];
}
[_fzhScrollView addSubview:imageView];
} _fzhScrollView.contentOffset = CGPointMake(SCREEN_WIDTH, );
_fzhScrollView.bounces = NO;
_fzhScrollView.showsHorizontalScrollIndicator = NO;
_fzhScrollView.pagingEnabled = YES;
_fzhScrollView.delegate = self;
//添加定时器
[self addTimer];
[self.view addSubview:_fzhScrollView]; }
/**
* 添加定时器
*/
- (void)addTimer
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
/**
* 移除定时器
*/
- (void)removeTimer
{
[self.timer invalidate];
self.timer = nil;
}
- (void)nextImage
{
//1.计算page
int page = ;
if (_pageCtl.currentPage == imageNum - ) {
page = ;
} else {
page = (int)_pageCtl.currentPage + ;
}
//如果在第0个位置,把滑动位置设置为最后一张
if (_fzhScrollView.contentOffset.x == ) {
_fzhScrollView.contentOffset = CGPointMake(imageNum * SCREEN_WIDTH, );
//如果在第imageNum + 1个位置,把滑动位置设置为第一张
}else if (_fzhScrollView.contentOffset.x == (imageNum + ) * SCREEN_WIDTH){
_fzhScrollView.contentOffset = CGPointMake(SCREEN_WIDTH, );
}else{
CGFloat offsetX = _fzhScrollView.contentOffset.x;
offsetX = offsetX + SCREEN_WIDTH;
_fzhScrollView.contentOffset = CGPointMake(offsetX, );
}
}
//创建分页控制器
- (void)setupPageControl
{
_pageCtl = [[UIPageControl alloc]initWithFrame:CGRectMake(, , SCREEN_WIDTH, )]; _pageCtl.numberOfPages = imageNum; _pageCtl.backgroundColor = [UIColor blackColor]; [self.view addSubview:_pageCtl]; } #pragma mark ---UIScrollViewDelegate
/**
* 当scrollView正在滚动就会调用
*/
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//如果在第0个位置,把滑动位置设置为最后一张
if (_fzhScrollView.contentOffset.x == ) {
_fzhScrollView.contentOffset = CGPointMake(imageNum * SCREEN_WIDTH, );
_pageCtl.currentPage = imageNum;
//如果在第imageNum + 1个位置,把滑动位置设置为第一张
}else if (_fzhScrollView.contentOffset.x == (imageNum + ) * SCREEN_WIDTH){
_fzhScrollView.contentOffset = CGPointMake(SCREEN_WIDTH, );
_pageCtl.currentPage = ;
}else{ _pageCtl.currentPage = (scrollView.contentOffset.x + SCREEN_WIDTH * 0.5)/SCREEN_WIDTH -;
} }
/**
* 开始拖拽的时候调用
*/
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// 停止定时器(一旦定时器停止了,就不能再使用)
[self removeTimer];
} /**
* 停止拖拽的时候调用
*/
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 开启定时器
[self addTimer];
}

demo:下载地址:https://github.com/fengzhihao123/FZHAutoScrollView;

tip:如果出现图片不存在的错误,自己再拖拽进3张图片修改一下名称即可!

iOS --UIScrollView的学习(三)自动轮播的更多相关文章

  1. JavaScript学习之自动轮播图片

    定时器 在实现轮播图之前需要首先了解一下JavaScript的定时器 setInterval()和clearInterval() 1.setInterval() 方法可按照指定的周期(以毫秒计)来调用 ...

  2. iOS --UIScrollView的学习(二)

    1.接着上一次的说:http://www.cnblogs.com/fengzhihao/p/5287734.html,这次讲一下UISCrollView的缩放功能. 2.当用户在UIScrollVie ...

  3. iOS --UIScrollView的学习(一)

    1.为什么使用UIScrollView 因为移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限,当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIV ...

  4. ios开发runtime学习三:动态添加方法(实际应用少,面试)

    #import "ViewController.h" #import "Person.h" /* 1: Runtime(动态添加方法):OC都是懒加载机制,只要 ...

  5. ios开发网络学习三:NSURLConnection小文件大文件下载

    一:小文件下载 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDele ...

  6. iOS开发UI篇—UIScrollView控件实现图片轮播

    iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: #import "YYV ...

  7. 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

    原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...

  8. Android自动轮播的三种方式

    方法一:在runable里判断,不是最后条目的时候++,是的话=0,获取当前条目,给viewpager设置,然后在runable里递归post,在外面也post这个run // 自动轮播条显示 if ...

  9. Javascript专题(三)b.各种轮播和细节分析--上下滚动轮播

    这一次,我们用原生JS实现上下滚动方式的轮播.顺带学习一下用JS来创建HTML元素. 上一次写的轮播是淡入淡出效果的,相对来说其实是比较简单的. github源码: 上下轮播源码-github A. ...

随机推荐

  1. flume 配置说明

    Flume中的HDFS Sink应该是非常常用的,其中的配置参数也比较多,在这里记录备忘一下. channel type hdfs path 写入hdfs的路径,需要包含文件系统标识,比如:hdfs: ...

  2. 39. Combination Sum (Back-Track)

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  3. 除了DFS的空间恒定为宽度*深度之外,其余都是宽度^深度次方

  4. oracle忘记密码,修改密码

    1:输入命令: sqlplus /nolog ,进入oracle控制台,并输入 conn /as sysdba;以DBA角色进入.2:若修改某一个用户密码, 修改用户口令 格式为:alter user ...

  5. [转].NET 4.5+项目迁移.NET Core的问题记录 HTTP Error 502.5

    本文转自:http://www.cnblogs.com/ronli/p/5900001.html 这几天试着把目前的开发框架迁移到新的.net core平台,中间遇到的问题在这里简单记录一下. 迁移过 ...

  6. 四元数--结合《real time rendering》中关于四元数部分

    四元数产生于1843年,是复数的一个扩展,所以里面包含了一些复数的运算.直到1985年才在图形学中使用. 四元数的优势是,相对与矩阵和欧拉角,四元数更直观和方便.四元数还可以用作某些方向上的插值,而欧 ...

  7. Spring JMX之二:远程访问MBean

    虽然最初的JMX规范提及了通过MBean进行应用的远程管理,但是它并没有定义实际的远程 访问协议或API.因此,会由JMX供应商定义自己的JMX远程访问解决方案,但这通常又是专 有的. 为了满足以标准 ...

  8. 一次清理Hbase的oldWALs的过程

    HBase版本:1.3.1 Hadoop版本:2.7.1 Zookeeper版本:3.4.6 --------------------------------- 检查线上业务系统的磁盘空间, 发现HD ...

  9. mongo学习- mapReduce操作事例

    源数据: { "_id" : 1.0, "name" : "abc", "age" : 43.0, "type ...

  10. Modelsim设置数据以模拟波形显示

    选中希望以模拟波形显示的信号,右击选择format—>Analog(automatic) 如果你的数据是用无符号数表示一个完整的波形的,那么可能显示出来的波形样子是下面的样子,不过不要紧,这是因 ...