国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS實現(xiàn)自動循環(huán)播放的banner實例詳解

2019-10-21 18:42:51
字體:
供稿:網(wǎng)友

前言

對于banner輪播圖,相信大家都會經(jīng)常用到。自動循環(huán)播放的banner是很常見的UI組件。如何實現(xiàn)呢?下面就來給大家詳細介紹下,話不多說了,下面來一起學習學習吧。

1.實現(xiàn)思路

1.橫向滾動的banner。

  • UIScrollViw+UIImageView.
  • UICollectionView+UICollectionViewCell.
  • 前者需要自己做重用UIImageView,后者可以直接重用UICollectionViewCell。如果前者沒有做重用,多占用內(nèi)存。

2.自動循環(huán)播放banner。

  • 可以使用計時器觸發(fā)循環(huán)播放.
  • 拖動或手動滑動banner時,停止自動循環(huán)播放banner。手勢停止后,開啟自動循環(huán)播放banner。

3.特殊banner位的處理。

  • 處于第1個或最后1個時,為保證橫向自動滑動效果流暢性,不跳動,需要特殊處理下。
  • 在生成banner時,第1個前面插入最后1個banner。最后1個banner后面插入第1個banner。當滑動到最后1個banner時,重置于第2個banner位。

2.本文采用第二種:UICollectionView+UICollectionViewCell

關(guān)鍵代碼實現(xiàn)

2.1生成banner的特殊處理

- (void)setBannerList:(NSArray<KBannerItem *> *)bannerList { if (bannerList.count > 1) {  NSMutableArray *itemList = [NSMutableArray arrayWithArray:bannerList];  [itemList insertObject:bannerList.lastObject atIndex:0];  [itemList addObject: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.collectionView reloadData]; self.collectionView.contentOffset = CGPointMake(CGRectGetWidth(self.collectionView.frame), 0);}

2.2 banner自動循環(huán)播放觸發(fā)的事件

- (void)handleBannerChangeEvent:(id)sender { if (_bannerPageControl.numberOfPages <= 1) {  return; } NSInteger page = _bannerPageControl.currentPage + 1; [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:page + 1 inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:YES];}

2.3開啟自動播放或關(guān)閉自動播放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; } CGFloat width = CGRectGetWidth(scrollView.frame); NSInteger currentPage = scrollView.contentOffset.x / width; if (currentPage == 0) {  if (scrollView.contentOffset.x < 0) {   [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:_bannerList.count - 2 inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:NO];   self.bannerPageControl.currentPage = _bannerList.count - 2;  }else{   [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:NO];   self.bannerPageControl.currentPage = 0;  } }else if (currentPage == _bannerList.count - 1) {  self.bannerPageControl.currentPage = 0;  [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:NO]; }else{  self.bannerPageControl.currentPage = currentPage - 1; }}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜都市| 诸城市| 东乡| 霞浦县| 张家港市| 谷城县| 确山县| 山阴县| 永修县| 柳林县| 鱼台县| 三门峡市| 南京市| 浦江县| 乌拉特中旗| 基隆市| 池州市| 沭阳县| 麻江县| 基隆市| 潍坊市| 普兰县| 拉萨市| 寿宁县| 黄浦区| 铁岭市| 新建县| 高安市| 温州市| 石台县| 南乐县| 措勤县| 嘉黎县| 简阳市| 盈江县| 吉水县| 安龙县| 乐亭县| 英吉沙县| 永安市| 建宁县|