前言
以前开发程序的时候需要使用图片轮播的效果,最开始的想法就是使用多少张图片就创建多少个UIImageView贴上去,当时确实也是这么做的,但是图片播放到最后一张的时候手动是没法直接切换到第一张图片的,这就给用户带来不好的体验,而且UIImageView创建多了,对性能也是有很大的影响的,所以潜心研究了下。啥也不多说了,直接上代码:https://github.com/zengqingf/ZQFCycleView
原理:
其实原理也很简单,就是放上三个UIImageView,默认的显示的是中间的UIImageView展示,当用户划到下一张图片的临界点时候,偷偷的切换回中间的UIImageView展示,但是UIImage却全部换掉了,也就是说用户永远看到的是中间的UIImageView,只是内容不同而已。如果你也觉得demo对你有用的话,千万不要忘记star哦!
纯代码写出来的无限轮播图,可以轻松的使用第三方比如SDImage等异步加载轮播图上的图片
作者的新浪微博是 @爱编程的小福子 记得关注我哦!
开始使用ZQFCycleView
创建轮播图
self.cycleView = [[ZQFCycleView alloc] initWithFrame:CGRectMake(0, 20, width, 180) delegate:self];
[self.view addSubview:_cycleView];
实现代理方法
//返回图片的个数
- (NSInteger)countOfCycleView:(ZQFCycleView *)cycleView{
return self.dataArr.count;
}
//设置imageview
- (void)cycleView:(ZQFCycleView *)cycleView willDisplayImageView:(UIImageView *)imageView index:(NSInteger)index{
//如果需要网络加载,这里可以使用第三方,比如SDImage等等
imageView.image = self.dataArr[index];
}
//滑动停止的时候显示标签
- (void)cycleView:(ZQFCycleView *)cycleView didDisplayTitleLabel:(UILabel *)titleLabel index:(NSInteger)index{
titleLabel.text = [NSString stringWithFormat:@"当前的索引是:%ld", index];
}
//点击触发的
- (void)cycleView:(ZQFCycleView *)cycleView didTouchImageView:(UIImageView *)imageView titleLabel:(UILabel *)titleLabel index:(NSInteger)index{
NSLog(@"%@", [NSString stringWithFormat:@"当前点击的是:%ld", index]);
}
开始播放
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.cycleView startPlayWithTimeInterval:5];//轮播图开始播放
}
停止播放
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.cycleView stopPlay];//控制器消失的时候记得停止轮播图的定时器,否则可能出现内存泄露
}