iOS中 scrollView版轮播器(优化版)
2016-06-06 10:39
429 查看
scrollView版轮播器(优化版)
- (void)viewDidLoad
{
[superviewDidLoad];
// 0.一些固定的尺寸参数
CGFloat imageW =self.scrollView.frame.size.width;
CGFloat imageH =self.scrollView.frame.size.height;
CGFloat imageY =0;
// 1.添加5张图片到scrollView中
for (int i =0; i<MJImageCount;
i++) {
UIImageView *imageView = [[UIImageViewalloc]init];
// 设置frame
CGFloat imageX = i * imageW;
imageView.frame =CGRectMake(imageX, imageY, imageW, imageH);
// 设置图片
NSString *name = [NSStringstringWithFormat:@"img_0%d",
i +1];
imageView.image = [UIImageimageNamed:name];
[self.scrollViewaddSubview:imageView];
}
// 2.设置内容尺寸
CGFloat contentW =MJImageCount * imageW;
self.scrollView.contentSize =CGSizeMake(contentW,0);
// 3.隐藏水平滚动条
self.scrollView.showsHorizontalScrollIndicator
= NO;
// 4.分页
self.scrollView.pagingEnabled
= YES;
self.scrollView.delegate =self;
// 5.设置pageControl的总页数
self.pageControl.numberOfPages
= 5;
// 6.添加定时器(每隔2秒调用一次self的nextImage方法)
// [self addTimer];
}
/**
* 添加定时器
*/
- (void)addTimer
{
// self.timer = [NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(nextImage)userInfo:nilrepeats:YES];
self.timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void)nextImage
{
// 1.增加pageControl的页码
int page =0;
if (self.pageControl.currentPage
== 4) {
page = 0;
self.pageControl.currentPage = page;
// 2.计算scrollView滚动的位置
CGFloat offsetX = page *self.scrollView.frame.size.width;
CGPoint offset =CGPointMake(offsetX,0);
//改变当前的现实页数通过改变偏移量来实现换页
[self.scrollViewsetContentOffset:offsetanimated:YES];
} else {
page = self.pageControl.currentPage +1;
self.pageControl.currentPage = page;
// 2.计算scrollView滚动的位置
CGFloat offsetX = page *self.scrollView.frame.size.width;
CGPoint offset =CGPointMake(offsetX,0);
//改变当前的现实页数通过改变偏移量来实现换页
[self.scrollViewsetContentOffset:offsetanimated:YES];
}
}
#pragma mark - 代理方法
/**
* 当scrollView正在滚动就会调用
*/
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 根据scrollView的滚动位置决定pageControl显示第几页
CGFloat scrollW = scrollView.frame.size.width;
//加一半这样用户体验会更好 拖拽过一半才会换页
// 这样的方法适合写在viewdidcsroll里面
int page = (scrollView.contentOffset.x + scrollW *0.5)
/ scrollW;
self.pageControl.currentPage = page;
}
/**
* 开始拖拽的时候调用
*/
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// 停止定时器(一旦定时器停止了,就不能再使用)
[selfremoveTimer];
}
/**
* 停止拖拽的时候调用
*/
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 开启定时器
[selfaddTimer];
}
/**
* 移除定时器
*/
- (void)removeTimer
{
[self.timerinvalidate];
self.timer =nil;
}
- (void)viewDidLoad
{
[superviewDidLoad];
// 0.一些固定的尺寸参数
CGFloat imageW =self.scrollView.frame.size.width;
CGFloat imageH =self.scrollView.frame.size.height;
CGFloat imageY =0;
// 1.添加5张图片到scrollView中
for (int i =0; i<MJImageCount;
i++) {
UIImageView *imageView = [[UIImageViewalloc]init];
// 设置frame
CGFloat imageX = i * imageW;
imageView.frame =CGRectMake(imageX, imageY, imageW, imageH);
// 设置图片
NSString *name = [NSStringstringWithFormat:@"img_0%d",
i +1];
imageView.image = [UIImageimageNamed:name];
[self.scrollViewaddSubview:imageView];
}
// 2.设置内容尺寸
CGFloat contentW =MJImageCount * imageW;
self.scrollView.contentSize =CGSizeMake(contentW,0);
// 3.隐藏水平滚动条
self.scrollView.showsHorizontalScrollIndicator
= NO;
// 4.分页
self.scrollView.pagingEnabled
= YES;
self.scrollView.delegate =self;
// 5.设置pageControl的总页数
self.pageControl.numberOfPages
= 5;
// 6.添加定时器(每隔2秒调用一次self的nextImage方法)
// [self addTimer];
}
/**
* 添加定时器
*/
- (void)addTimer
{
// self.timer = [NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(nextImage)userInfo:nilrepeats:YES];
self.timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void)nextImage
{
// 1.增加pageControl的页码
int page =0;
if (self.pageControl.currentPage
== 4) {
page = 0;
self.pageControl.currentPage = page;
// 2.计算scrollView滚动的位置
CGFloat offsetX = page *self.scrollView.frame.size.width;
CGPoint offset =CGPointMake(offsetX,0);
//改变当前的现实页数通过改变偏移量来实现换页
[self.scrollViewsetContentOffset:offsetanimated:YES];
} else {
page = self.pageControl.currentPage +1;
self.pageControl.currentPage = page;
// 2.计算scrollView滚动的位置
CGFloat offsetX = page *self.scrollView.frame.size.width;
CGPoint offset =CGPointMake(offsetX,0);
//改变当前的现实页数通过改变偏移量来实现换页
[self.scrollViewsetContentOffset:offsetanimated:YES];
}
}
#pragma mark - 代理方法
/**
* 当scrollView正在滚动就会调用
*/
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 根据scrollView的滚动位置决定pageControl显示第几页
CGFloat scrollW = scrollView.frame.size.width;
//加一半这样用户体验会更好 拖拽过一半才会换页
// 这样的方法适合写在viewdidcsroll里面
int page = (scrollView.contentOffset.x + scrollW *0.5)
/ scrollW;
self.pageControl.currentPage = page;
}
/**
* 开始拖拽的时候调用
*/
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// 停止定时器(一旦定时器停止了,就不能再使用)
[selfremoveTimer];
}
/**
* 停止拖拽的时候调用
*/
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 开启定时器
[selfaddTimer];
}
/**
* 移除定时器
*/
- (void)removeTimer
{
[self.timerinvalidate];
self.timer =nil;
}
相关文章推荐
- MySQL 优化
- Google排名优化的几个影响因素
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 对优化Ruby on Rails性能的一些办法的探究
- 优化Ruby脚本效率实例分享
- Asp编码优化技巧
- 如何监测和优化OLAP数据库
- mysql -参数thread_cache_size优化方法 小结
- 深入学习SQL Server聚合函数算法优化技巧
- MySQL常见的底层优化操作教程及相关建议
- 详解mysql的limit经典用法及优化实例
- ScrollView滚动条颜色的设置方法
- 数据库学习建议之提高数据库速度的十条建议
- oracle数据库sql的优化总结
- SQL语句性能优化(续)
- SQL语句优化提高数据库性能
- SQL优化经验总结
- SQL优化技巧指南