返回 登录
0

ZZCarousel,基于UIScrollView的无限轮播框架

上回发了篇关于Photos框架知识的文章并且开源了ZZPhotoKit这个相册多选和相机连拍的框架。有不少的人都会问我一些开源代码的使用问题,感觉到了有一点点的成就感,虽然和大神的称呼不沾边,但我是在追赶大神的道路上。所以今天准备发一篇关于我开发的轮播器的文章。

以前看过不少人开源轮播框架,也在项目中使用过别的ios-coder写的轮播,可感觉控件可定义性稍微低了点。最近手头项目比较空挡,所以自己亲手来写一个自认为稍微强大些,可定义强一些的轮播。注:可能是我想太多了。
图片描述

接下来我就要吹吹自己的开源了。Demo已经在Github上传过,并多次测试确认无崩溃现象。

Github下载地址: 链接内容

联系方式
新浪微博关注:Coder__Z
QQ号:412016060
我的技术交流QQ群号:161389554欢迎大家的加入(近期刚刚成立)。

直接来介绍一下实现轮播图的代码,详细的使用还是要参考Demo中的使用。

ZZCarouselControl *carouselView = [[ZZCarouselControl alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height / 3)];
carouselView.carouseScrollTimeInterval = 2.0f;
※必须实现的协议
carouselView.dataSource = self;
carouselView.delegate = self;
self.view addSubview:carouselView];
※※※   注意下面的方法必须加入,如果不写此方法会导致数据无法正常加载
[carouselView reloadData];

协议方法以及方法中参数的详细介绍:
必须实现的方法
-(NSArray ) zzcarousel:(ZZCarouselControl )carouselView;
-(UIView ) zzcarousel:(ZZCarouselControl )carouselView carouselFrame:(CGRect)frame data:(NSArray *)data viewForItemAtIndex:(NSInteger)index;
可选择实现的方法
-(void)zzcarouselView:(ZZCarouselControl *)zzcarouselView didSelectItemAtIndex:(NSInteger)index;

那么如何来实现这些方法呢。
下面来逐一给大家介绍这几个方法的使用。
这些方法是不是看着有点类似于tableview的datasource和delegate。没错,考虑到轮播器在ViewController中代码的工整所以我也采用了这种方式。

-(NSArray *) zzcarousel:(ZZCarouselControl *)carouselView;

返回值为NSArray,只需要传入数据的数组即可。
-(UIView *) zzcarousel:(ZZCarouselControl *)carouselView carouselFrame:(CGRect)frame data:(NSArray *)data viewForItemAtIndex:(NSInteger)index;

在这个方法中十分类似于tableview的cellForRowAtIndexPath:这个方法,只不过这里返回的是一个UIView。
所以可以在UIView中随意的添加UIImageUILable,等等控件addsubview到UIview即可。
frame参数为轮播器中每个UIView的位置,所以大家在轮播器中自定义添加控件的时候就要用到frame这个参数。
data参数为上一个方法中传入的NSArray中的数据。
index参数不用说了跟tableview中的indexpath.row一个性质。
※注意:在这个方法中不需要从外部传一个NSArray进来了,直接用data就好 
-(void)zzcarouselView:(ZZCarouselControl *)zzcarouselView didSelectItemAtIndex:(NSInteger)index;

点击方法这个也不多啰嗦了,相信大家都懂。

由于自身的语言组织能力不太好,所以一切都靠代码来跟大家交流了。详细的使用还要看下Demo中的例子了。
喜欢这个轮播器的同学可以在Github中给star,可能不会被大多数人认可,望大家给予反馈,好及时修正不足的地方。

评论