iOS 轮播图的实现scrollView
来源:互联网 发布:知无涯者 台词 编辑:程序博客网 时间:2024/05/16 08:44
前言 : 因为看到技术文章有很多关于轮播图的实现,可是并没有想象中的那么的实现简单,于是自己写一个当作以后的笔记。加深印象
有对轮播图实现原理不清楚的朋友可以自行百度也可以看下这篇文章。本文不做赘述(ps通过scroll来实现轮播效果)。
直接进入正文
- 假设 scrollview展示三个View 红 黄 蓝, 为了实现无限轮播需求,我们可以最左边加个 蓝 右边加个红 用于循环
创建代码如下
NSArray *colorArray = @[[UIColor blueColor],[UIColor redColor],[UIColor yellowColor],[UIColor blueColor],[UIColor redColor]]; self.colorsArray = [NSArray arrayWithArray:colorArray]; ```这里用到了for循环创建
for (int i = 0; i < colorArray.count; i++) {
UIView *view = [[UIView alloc] init]; view.backgroundColor = colorArray[i]; view.frame = CGRectMake(i*CGRectGetWidth(self.view.frame), 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(_myscrollView.frame)); UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; lable.center = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetHeight(_myscrollView.frame)/2 - 15); [lable setFont:[UIFont systemFontOfSize:21]]; lable.textAlignment = NSTextAlignmentCenter; lable.text = [NSString stringWithFormat:@"%d",i]; [view addSubview:lable]; [_myscrollView addSubview:view];}_myscrollView.pagingEnabled = YES;_myscrollView.showsHorizontalScrollIndicator = NO;_myscrollView.contentSize = CGSizeMake(colorArray.count*CGRectGetWidth(self.view.frame), 0);_myscrollView.contentOffset = CGPointMake(CGRectGetWidth(self.view.frame), 0);_myscrollView.bounces = NO;
[self addTimer];
当然了无限滚动还需要一个定时器创建
(void)addTimer
{
if (self.timer)return;
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runImage) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
再来一个移除
(void)invalidateTimer
{
[self.timer invalidate];
self.timer = nil;
}
定时器开启,走方法,管控轮播
(void)runImage
{
CGPoint apoint = self.myscrollView.contentOffset;
[self.myscrollView setContentOffset:CGPointMake(apoint.x+CGRectGetWidth(self.view.frame), 0) animated:YES];
}
定时器 以动画形式改变scrollview的contentOffset 调用
(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
NSLog(@”endani”);
if (scrollView.contentOffset.x==0) {
[scrollView setContentOffset:CGPointMake(CGRectGetWidth(self.view.frame)*(self.colorsArray.count-2), 0)];
}else if (scrollView.contentOffset.x==scrollView.contentSize.width-CGRectGetWidth(self.view.frame)){
[scrollView setContentOffset:CGPointMake(CGRectGetWidth(self.view.frame), 0)];
}
}
“`
当然免不了测试人员会拖拽
开始拖拽(关闭定时器)
(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ [self invalidateTimer];}
结束拖拽(开启定时器)
(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ NSLog(@"enddra"); [self addTimer];}
这样就实现了一个简单的轮播图,当然对于数据量大的轮播来说,还是用collection实现为好。有时间我会再写一个collection实现轮播的方式,最后Demo地址
- iOS 轮播图的实现scrollView
- iOS scrollview的实现
- iOS中scrollview自动滚动的实现
- iOS中scrollview自动滚动的实现
- iOS中scrollview自动滚动的实现
- iOS中scrollview自动滚动的实现
- ios-ScrollView缩放的实现原理
- 模仿ios的scrollView
- iOS----实现scrollView或者scrollView的子类下拉图片放大的效果
- iOS viewDeck和scrollView结合实现的侧滑栏(仿网易)
- iOS scrollview实现图片放大和缩小的功能
- iOS的ScrollView包含TableView使用AutoLayout实现滚动
- iOS实现UINavigationBar随ScrollView偏移而渐变的效果
- iOS 点击状态栏返回顶部(多scrollView的实现)
- iOS - scrollView与headerView的视差滚动实现思路 scrollView 可接收通知啊
- 弹性scrollview的实现
- iOS 弹性HeaderView 的ScrollView
- iOS 自定义scrollView的pagingEnabled
- oracle查询下条记录日期做为上条记录的结束日期
- winform listbox控件简单使用。
- Reinforcement Learning_By David Silver笔记三: Planning by Dynamic Programming
- uboot 网络不通问题解决一例1
- maven 刚创建就报错
- iOS 轮播图的实现scrollView
- django配置源码的tinymce部署环境下不显示富文本编辑器
- jquery ,each,return
- 青否云
- Intel-gpu-tools
- 如何使用register_shutdown_function()捕获PHP致命错误?
- Android SystemServer的创建过程
- matlab之自定义和保存Colorbar
- http笔记