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. react-navigation 3.x版本的安装以及react-native-gesture-handler配置

    一.安装依赖,使用npm或yarn命令,3.x版本必须安装react-native-gesture-handler react-navigation react-native-gesture-hand ...

  2. Golang之fmt格式“占位符”

    golang的fmt包实现了格式化I/O函数: package main import "fmt" type Human struct { Name string } func m ...

  3. Socket发送文件

    .Net.cs using System; using System.Collections.Generic; using System.IO; using System.Linq; using Sy ...

  4. Spring boot——logback.xml 配置详解(二)

    阅读目录 1 根节点包含的属性 2 根节点的子节点 文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部 1 根节点<config ...

  5. UCI数据

    http://archive.ics.uci.edu/ml/datasets.html?format=&task=&att=&area=&numAtt=&num ...

  6. 简述json模块

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,他的数据结构与Python中的字典一样,键值对来表示数据间的关系,可以包含列表. 在编写 ...

  7. 高性能mysql第三版(文摘)

    第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...

  8. 3ds Max从入门到精通

    1. 软件的下载与安装 这里用的是3ds Max2009简体中文版 32位 在 Win7上运行记得打上sp2补丁,不然会有bug. 2. 3ds Max的历史 3ds Max可以用在动画和游戏,点云数 ...

  9. window.location 对象

    http://www.home.com:8080/windows/location/page.html?ver=1.0&id=timlq#love 1, window.location.hre ...

  10. 第二届CCCC赛后感想 2017-04-15 23:56 88人阅读 评论(0) 收藏

    第一次写赛后感想,也不算什么很正规的比赛,不过这次比赛的时间恰好处于思想变化的阶段,留贴纪念. 先谈谈这次比赛,弱校萌新,依靠申请进了总决赛,发现和第一届不一样,缺少了团队奖心中有点缺乏动力,比赛2个 ...