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)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
随机推荐
- C++算法原理与实践(面试中的算法和准备过程)
第0部分 简介 1. 举个例子:面试的时候,可能会出一道算法考试题,比如写一个 strstr 函数——字符串匹配. 可能会想到用KMP算法来解题,但是该算法很复杂,不适宜在面试中使用. 1.1 C++ ...
- apt-get build-dep
apt-get 里面有个 build-dep参数,手册写着:build-dep causes apt-get to install/remove packages in an attempt to s ...
- js面向对象编程: js类定义函数时prototype和this区别?
参考文章的链接:http://www.2cto.com/kf/201406/307790.html 测试代码如下: function ListCommon2(afirst) { var first=a ...
- Zigbee学习
(一)Zigbee简介和开发环境快速建立(IAR) 1.我不是很清楚控制链条,对于Zigbee不是太清楚 答案:CC2530 芯片上集成了 8051 内核(增强型) 2.性能特点:低速率远距离,这造就 ...
- 关于即来即停app的功能
Asmallpark软件接口文档说明 编码均采用UTF-8格式传输全部为http,POST请求状态码:200 操作成功 100 服务器异常,稍后再试 404 请求非法 402 数据库 ...
- Python3基础 父,子类普通方法重名 子类方法覆盖父类方法
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- spring boot 使用@ConfigurationProperties
有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配 ...
- [BZOJ2208][Jsoi2010]连通数 暴力枚举
Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...
- SPA (单页应用程序)
单页Web应用 编辑 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程 ...
- HDU 2546 饭卡(0-1背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 题意: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金 ...