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. SQL Server判断数据库、表、存储过程、函数是否存在

    --判断数据库是否存在 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] --判断表是否 ...

  2. WebLogic(12C)——几个基本概念

    转http://blog.csdn.net/hanxuemin12345/article/details/46287597 目录(?)[-] 域Domain 服务器Server 机器Machine W ...

  3. IPMI (Intelligent Platform Management Interface)

    4.3. ipmitool - utility for controlling IPMI-enabled devices 4.3.1. ipmitool 4.3.1.1. ubuntu 确定硬件是否支 ...

  4. Js And PHP Modify Cookie

    简单的js函数封装cookie //设置cookie function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime ...

  5. 使用Log4J监控系统日志邮件警报

    使用Log4J监控系统日志邮件警报 前言 在系统上线后,有时候遇到系统故障,这时候就可以登录服务器查看系统日志来排查问题.但是需要登录服务器,下载查找相关异常日志比较麻烦.而且没有监控的话,也无法实时 ...

  6. Golang之实现一个负载均衡算法(随机,轮询)

    代码记录 程序结构目录 --------程序包 package balance type Balancer interface { DoBalance([]*Instance, ...string) ...

  7. golang之包和锁的机制

    互斥锁 同一时刻只有一个携程在操作 package main import ( "fmt" "math/rand" "sync" " ...

  8. 虚拟机CentOS6.5搭建samba服务器实现文件共享

    Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务.Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享:而守护进程smbd和nmbd是Samba ...

  9. Git简明使用指南[转]

    git - 简易指南 助你开始使用 git 的简易指南,木有高深内容,;). Tweet 作者:罗杰·杜德勒 感谢:@tfnico, @fhd and Namics 其他语言 english, deu ...

  10. 用Swift实现一款天气预报APP(二)

    这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 上篇中主要讲了界面的一些内容,这篇主要讨论网络请求,获得 ...