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. ...
随机推荐
- SQL Server判断数据库、表、存储过程、函数是否存在
--判断数据库是否存在 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] --判断表是否 ...
- WebLogic(12C)——几个基本概念
转http://blog.csdn.net/hanxuemin12345/article/details/46287597 目录(?)[-] 域Domain 服务器Server 机器Machine W ...
- IPMI (Intelligent Platform Management Interface)
4.3. ipmitool - utility for controlling IPMI-enabled devices 4.3.1. ipmitool 4.3.1.1. ubuntu 确定硬件是否支 ...
- Js And PHP Modify Cookie
简单的js函数封装cookie //设置cookie function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime ...
- 使用Log4J监控系统日志邮件警报
使用Log4J监控系统日志邮件警报 前言 在系统上线后,有时候遇到系统故障,这时候就可以登录服务器查看系统日志来排查问题.但是需要登录服务器,下载查找相关异常日志比较麻烦.而且没有监控的话,也无法实时 ...
- Golang之实现一个负载均衡算法(随机,轮询)
代码记录 程序结构目录 --------程序包 package balance type Balancer interface { DoBalance([]*Instance, ...string) ...
- golang之包和锁的机制
互斥锁 同一时刻只有一个携程在操作 package main import ( "fmt" "math/rand" "sync" " ...
- 虚拟机CentOS6.5搭建samba服务器实现文件共享
Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务.Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享:而守护进程smbd和nmbd是Samba ...
- Git简明使用指南[转]
git - 简易指南 助你开始使用 git 的简易指南,木有高深内容,;). Tweet 作者:罗杰·杜德勒 感谢:@tfnico, @fhd and Namics 其他语言 english, deu ...
- 用Swift实现一款天气预报APP(二)
这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 上篇中主要讲了界面的一些内容,这篇主要讨论网络请求,获得 ...