无限轮播的原理:
在图片的数组中额外插入两个图片,在数组第一个元素前加一个图片,和原数组中最后一个图片相同,在数组最后一个元素后加图片,和原数组第一个图片相同。
NSMutableArray *muArr = [NSMutableArray array]; [muArr addObject: imageNameArray.lastObject]; [muArr addObjectsFromArray:imageNameArray]; [muArr addObject: imageNameArray.firstObject];
以数字代表图片做例子:
原数组 = @[1,2,3,4,5];
现数组 = @[5,1,2,3,4,5,1];
当ScrollView滚动到 现数组 5(下标0)的位置的时候,让ScrollView的偏移量直接移到 下一个5(下标5),
当ScrollView滚动到 现数组 1(下标6)的位置的时候,让ScrollView的偏移量直接移到 下一个1(下标1),
/* 参数:滚动偏移量X值: scrollOffset 滚动视图: scrollView 滚动视图宽度: scrollFrameW 现数组: _imageNameArr */ if (scrollOffset == 0) scrollView.contentOffset = CGPointMake(scrollFrameW* (_imageNameArr.count-2), 0); else if (scrollOffset == scrollFrameW* (_imageNameArr.count-1)) scrollView.contentOffset = CGPointMake(scrollFrameW, 0);
Timer的定时器让它定时重复执行指定代码从而完成自动滚动无限轮播的功能。
下面有我自己封装的一个BannerView的Demo。
如果需要使用,需要提前导入SDWebImage第三方
遵守下代理,用代理方法即可获取轮播图的点击方法,返回点击item的下标
使用案例:
NSArray *imageNameArr = @[图片1,图片2,图片3]; DLBannerView *banner = [[DLBannerView alloc]initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 200) imageNameArray:imageNameArr timerWithtimeInterval:3.0]; banner.delegate = self; [self.view addSubview:banner];