iOS UI-UIScrollView控件实现图片轮播 (UIPageControl-分页指示器)
一、实现效果
实现图片的自动轮播

二、实现代码
storyboard中布局

代码:
#import "ViewController.h"
#define HMImageCount 5
@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@property (nonatomic, strong) NSTimer *timer;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; CGFloat imageW = self.scrollView.bounds.size.width;
CGFloat imageH = self.scrollView.bounds.size.height;
CGFloat imageY = ;
CGFloat imageX = ;
for (NSInteger i = ; i < HMImageCount; i++) {
UIImageView *imageView = [[UIImageView alloc] init];
// 拼接图片名称
NSString *imageName = [NSString stringWithFormat:@"img_%02ld", i + ];
imageView.image = [UIImage imageNamed:imageName];
// 计算图片的X
imageX = imageW * i;
imageView.frame = CGRectMake(imageX, imageY, imageW, imageH);
// 把每一张图片添加到scrollView中
[self.scrollView addSubview:imageView];
} // 1.设置scrollView的滚动范围
self.scrollView.contentSize = CGSizeMake(imageW * HMImageCount, );
// 2.设置分页
self.scrollView.pagingEnabled = YES;
// 3.隐藏水平滚动条
self.scrollView.showsHorizontalScrollIndicator = NO;
// 4.隐藏垂直滚动条
self.scrollView.showsVerticalScrollIndicator = NO; // 设置总页数
self.pageControl.numberOfPages = HMImageCount;
// 设置当前在第几页
self.pageControl.currentPage = ;
// 设置指示器在当前页的时候颜色
self.pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
// 默认的颜色
self.pageControl.pageIndicatorTintColor = [UIColor yellowColor]; // 5.设置srollView的代理
self.scrollView.delegate = self; // 6.添加定时器
[self timer]; } - (void)nextPage {
// 1.获取当前页码
NSInteger page = self.pageControl.currentPage;
// 2.判断是不是最后一页
if (page == HMImageCount - ) {
// 如果是最后一页就回到第0页
page = ;
} else {
// 如果不是最后一页
page++;
}
// 3.用每页的宽度 * (页码+1) == 计算除了下一页的contentoffset.x
CGFloat offsetX = page*self.scrollView.frame.size.width;
// 4.设置UIScrollView的contentoffset等于新的偏移值
[self.scrollView setContentOffset:CGPointMake(offsetX, ) animated:YES];
} // 实现scrollView滚动的方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { //如何计算当前滚动到了第几页
// 1.获取滚动的x方向的偏移量
CGFloat offsetX = self.scrollView.contentOffset.x;
offsetX = offsetX + self.scrollView.frame.size.width/;
// 2.用x方向的偏移量除以一张图片的宽度,取商就是当前滚动到了第几页
int page = offsetX/self.scrollView.frame.size.width;
//3.将页码赋值给UIPageControl
self.pageControl.currentPage = page; } // 开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
// 让定时器停止
[self.timer invalidate];
self.timer = nil;
} // 停止拖拽的时候开启定时器
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [self timer];
} - (NSTimer *)timer {
if (_timer == nil) { // 通过scheduledTimerWithTimeInterval这个方法创建的计时器控件,创建好以后自动启动
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
// 把当前的定时器添加到当前的运行循环中,并指定它为通用模式,这样主线程在执行的时候就可以抽那么一点时间来关注一下我们的定时器---修改NSTimer的优先级与其他控件一样
[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
}
return _timer;
}
@end
提示:以下两个属性已经和storyboard中的控件进行了连线。
@property (weak, nonatomic) IBOutlet UIScrollView *scrollview;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
补充:定时器NSTimer
定时器 适合用来隔一段时间做一些间隔比较长的操作
NSTimeInterval:多长多件操作一次
target :操作谁
selector : 要操作的方法
userInfo: 传递参数
repeats: 是否重复
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
iOS UI-UIScrollView控件实现图片轮播 (UIPageControl-分页指示器)的更多相关文章
- iOS开发UI篇—UIScrollView控件实现图片轮播
iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: #import "YYV ...
- 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播
原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...
- UIScrollView控件实现图片轮播
http://www.cnblogs.com/dyf520/p/3805297.html 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: 1 ...
- iOS开发UI篇—UIScrollView控件实现图片缩放功能
iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...
- iOS开发项目实战——Swift实现图片轮播与浏览
近期開始开发一个新的iOS应用,自己决定使用Swift.进行了几天之后,发现了一个非常严峻的问题.那就是无论是书籍,还是网络资源,关于Swift的实在是太少了,随便一搜全都是OC实现某某某功能.就算是 ...
- UIScrollView控件实现图片缩放功能
转发自:http://www.cnblogs.com/wendingding/p/3754268.html 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScr ...
- ios开发图片轮播器以及定时器小问题
一:图片轮播器效果如图:能实现自动轮播,到最后一页时,轮播回来,可以实现拖拽滚动 二:代码: #import "ViewController.h" ; @interface Vie ...
- 不同手机根据坐标计算控件、图片的像素,px 与 dp, sp换算公式?
参考该帖子:http://www.cnblogs.com/bluestorm/p/3640786.html PPI = Pixels per inch,每英寸上的像素数,即 "像素密度&qu ...
- iOS开发UI篇—UIScrollView控件介绍
iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
随机推荐
- P4289 [HAOI2008]移动玩具(bfs)
P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4* ...
- nginx配置https并强制http自动跳转到https
关于使用HTTPS/SSL的必要性,可以自行baidu,援引的说法,EFF(Electronic Frontier Foundation),全球过半流量采用https. https://www.osc ...
- mamcached+magent构建memcached集群
cat /etc/redhat-release CentOS release 6.7 (Final) 防火墙.selinux 关闭 192.168.12.30 安装libevent和memcached ...
- 20135234mqy-——信息安全系统设计基础第二周学习总结
Linux基础 1.Linux命令 command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数 选项(options)或参数(argument ...
- 【入门详解】MyBatis入门基础详解
什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...
- BZOJ5281: [Usaco2018 Open]Talent Show 01分数规划+01背包
Description FarmerJohn要带着他的N头奶牛,方便起见编号为1…N,到农业展览会上去,参加每年的达牛秀!他的第i头奶牛重 量为wi,才艺水平为ti,两者都是整数.在到达时,Farme ...
- v-bind绑定属性样式
一.class的四种绑定方式 1.布尔值的绑定方式 <div id="demo"> <span v-bind:class="{'class-a':isA ...
- 如何加速tomcat启动速度
在tomcat启动的时候,我们可以做一些优化设置来使得tomcat的启动更快速,下面是一些常见的优化加速启动的方法建议(以tomcat-7.+为例说明). 1. Jars包 1.1.将一些不必要的j ...
- NS3 Ptr<Rocket> 与 TcpRocket 的一个小问题
前因:ns3网络仿真 实验进行到很关键的一步,我尝试进行了代码的编写(还没有添加Traceback的函数),如下: #include "ns3/core-module.h" #in ...
- undefined!=false之解 及==比较的规则
JS中有一个基本概念就是: JavaScript中undefined==null 但undefined!==null undefined与null转换成布尔值都是false 如果按照常规想法,比如下面 ...