iOS实现自动循环播放的banner实例详解
前言
对于banner轮播图,相信大家都会经常用到。自动循环播放的banner是很常见的UI组件。如何实现呢?下面就来给大家详细介绍下,话不多说了,下面来一起学习学习吧。
1.实现思路
1.横向滚动的banner。
- UIScrollViw+UIImageView.
- UICollectionView+UICollectionViewCell.
- 前者需要自己做重用UIImageView,后者可以直接重用UICollectionViewCell。如果前者没有做重用,多占用内存。
2.自动循环播放banner。
- 可以使用计时器触发循环播放.
- 拖动或手动滑动banner时,停止自动循环播放banner。手势停止后,开启自动循环播放banner。
3.特殊banner位的处理。
- 处于第1个或最后1个时,为保证横向自动滑动效果流畅性,不跳动,需要特殊处理下。
- 在生成banner时,第1个前面插入最后1个banner。最后1个banner后面插入第1个banner。当滑动到最后1个banner时,重置于第2个banner位。
2.本文采用第二种:UICollectionView+UICollectionViewCell
关键代码实现
2.1生成banner的特殊处理
-(void)setBannerList:(NSArray*)bannerList{ if(bannerList.count>1){ NSMutableArray*itemList=[NSMutableArrayarrayWithArray:bannerList]; [itemListinsertObject:bannerList.lastObjectatIndex:0]; [itemListaddObject:bannerList.firstObject]; _bannerList=itemList; }else{ _bannerList=bannerList; } if(self.bannerList.count>1){ self.bannerPageControl.numberOfPages=self.bannerList.count-2; }else{ self.bannerPageControl.numberOfPages=0; } self.noBannerImageView.hidden=self.bannerList.count>0; self.bannerPageControl.currentPage=0; [self.collectionViewreloadData]; self.collectionView.contentOffset=CGPointMake(CGRectGetWidth(self.collectionView.frame),0); }
2.2banner自动循环播放触发的事件
-(void)handleBannerChangeEvent:(id)sender{ if(_bannerPageControl.numberOfPages<=1){ return; } NSIntegerpage=_bannerPageControl.currentPage+1; [self.collectionViewscrollToItemAtIndexPath:[NSIndexPathindexPathForRow:page+1inSection:0]atScrollPosition:UICollectionViewScrollPositionRightanimated:YES]; }
2.3开启自动播放或关闭自动播放bannner。
-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{ self.countTimer.isOpen=NO; } -(void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate{ self.countTimer.isOpen=YES; }
2.4.滑动时的特殊处理。
-(void)scrollViewDidScroll:(UIScrollView*)scrollView{ if(_bannerList.count<=1){ return; } CGFloatwidth=CGRectGetWidth(scrollView.frame); NSIntegercurrentPage=scrollView.contentOffset.x/width; if(currentPage==0){ if(scrollView.contentOffset.x<0){ [self.collectionViewscrollToItemAtIndexPath:[NSIndexPathindexPathForRow:_bannerList.count-2inSection:0]atScrollPosition:UICollectionViewScrollPositionRightanimated:NO]; self.bannerPageControl.currentPage=_bannerList.count-2; }else{ [self.collectionViewscrollToItemAtIndexPath:[NSIndexPathindexPathForRow:1inSection:0]atScrollPosition:UICollectionViewScrollPositionRightanimated:NO]; self.bannerPageControl.currentPage=0; } }elseif(currentPage==_bannerList.count-1){ self.bannerPageControl.currentPage=0; [self.collectionViewscrollToItemAtIndexPath:[NSIndexPathindexPathForRow:1inSection:0]atScrollPosition:UICollectionViewScrollPositionRightanimated:NO]; }else{ self.bannerPageControl.currentPage=currentPage-1; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。