iOS --UIScrollView的学习(三)自动轮播
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的学习(三)自动轮播的更多相关文章
- JavaScript学习之自动轮播图片
定时器 在实现轮播图之前需要首先了解一下JavaScript的定时器 setInterval()和clearInterval() 1.setInterval() 方法可按照指定的周期(以毫秒计)来调用 ...
- iOS --UIScrollView的学习(二)
1.接着上一次的说:http://www.cnblogs.com/fengzhihao/p/5287734.html,这次讲一下UISCrollView的缩放功能. 2.当用户在UIScrollVie ...
- iOS --UIScrollView的学习(一)
1.为什么使用UIScrollView 因为移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限,当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIV ...
- ios开发runtime学习三:动态添加方法(实际应用少,面试)
#import "ViewController.h" #import "Person.h" /* 1: Runtime(动态添加方法):OC都是懒加载机制,只要 ...
- ios开发网络学习三:NSURLConnection小文件大文件下载
一:小文件下载 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDele ...
- iOS开发UI篇—UIScrollView控件实现图片轮播
iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: #import "YYV ...
- 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播
原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...
- Android自动轮播的三种方式
方法一:在runable里判断,不是最后条目的时候++,是的话=0,获取当前条目,给viewpager设置,然后在runable里递归post,在外面也post这个run // 自动轮播条显示 if ...
- Javascript专题(三)b.各种轮播和细节分析--上下滚动轮播
这一次,我们用原生JS实现上下滚动方式的轮播.顺带学习一下用JS来创建HTML元素. 上一次写的轮播是淡入淡出效果的,相对来说其实是比较简单的. github源码: 上下轮播源码-github A. ...
随机推荐
- react-navigation 3.x版本的安装以及react-native-gesture-handler配置
一.安装依赖,使用npm或yarn命令,3.x版本必须安装react-native-gesture-handler react-navigation react-native-gesture-hand ...
- Golang之fmt格式“占位符”
golang的fmt包实现了格式化I/O函数: package main import "fmt" type Human struct { Name string } func m ...
- Socket发送文件
.Net.cs using System; using System.Collections.Generic; using System.IO; using System.Linq; using Sy ...
- Spring boot——logback.xml 配置详解(二)
阅读目录 1 根节点包含的属性 2 根节点的子节点 文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部 1 根节点<config ...
- UCI数据
http://archive.ics.uci.edu/ml/datasets.html?format=&task=&att=&area=&numAtt=&num ...
- 简述json模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,他的数据结构与Python中的字典一样,键值对来表示数据间的关系,可以包含列表. 在编写 ...
- 高性能mysql第三版(文摘)
第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...
- 3ds Max从入门到精通
1. 软件的下载与安装 这里用的是3ds Max2009简体中文版 32位 在 Win7上运行记得打上sp2补丁,不然会有bug. 2. 3ds Max的历史 3ds Max可以用在动画和游戏,点云数 ...
- window.location 对象
http://www.home.com:8080/windows/location/page.html?ver=1.0&id=timlq#love 1, window.location.hre ...
- 第二届CCCC赛后感想 2017-04-15 23:56 88人阅读 评论(0) 收藏
第一次写赛后感想,也不算什么很正规的比赛,不过这次比赛的时间恰好处于思想变化的阶段,留贴纪念. 先谈谈这次比赛,弱校萌新,依靠申请进了总决赛,发现和第一届不一样,缺少了团队奖心中有点缺乏动力,比赛2个 ...