亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2017年12月26日 08:42:17   作者:ksnowlv  
輪播視圖通常也叫Banner,90%以上App都會用到的一個控件,網(wǎng)上有很多開源代碼,下面這篇文章主要給大家介紹了關(guān)于利用iOS如何實(shí)現(xiàn)自動循環(huán)播放的banner的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。

前言

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

1.實(shí)現(xiàn)思路

1.橫向滾動的banner。

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

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

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

3.特殊banner位的處理。

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

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

關(guān)鍵代碼實(shí)現(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.滑動時(shí)的特殊處理。

- (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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:

相關(guān)文章

  • iOS推送增加右側(cè)顯示圖Service Extension

    iOS推送增加右側(cè)顯示圖Service Extension

    這篇文章主要為大家介紹了iOS推送增加右側(cè)顯示圖Service Extension,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • IOS客戶端接入微信支付

    IOS客戶端接入微信支付

    對于一個ios的app,如果有一些虛擬的商品或者服務(wù)需要通過在線支付來收費(fèi)的話,一般有幾種主流的選擇。如果是通過APP調(diào)用支付平臺APP的思路的話,一個是調(diào)起支付寶客戶端,一個則是調(diào)起微信支付。本文給大家分享ios客戶端接入微信支付,需要的朋友可以參考下
    2015-09-09
  • IOS代碼筆記之網(wǎng)絡(luò)嗅探功能

    IOS代碼筆記之網(wǎng)絡(luò)嗅探功能

    這篇文章主要為大家詳細(xì)介紹了IOS網(wǎng)絡(luò)嗅探功能實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例

    ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例

    本篇文章主要介紹了ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-01-01
  • IOS設(shè)置按鈕為圓角的示例代碼

    IOS設(shè)置按鈕為圓角的示例代碼

    這篇文章給大家分享了IOS按鈕設(shè)置為圓角的方法,按鈕的四個角都可隨意設(shè)置為圓角,對大家開發(fā)IOS具有一定的參考借鑒價(jià)值。有需要的朋友們可以參考借鑒。
    2016-09-09
  • iOS使用UIScorllView實(shí)現(xiàn)兩指縮放功能

    iOS使用UIScorllView實(shí)現(xiàn)兩指縮放功能

    兩指縮放功能不僅可以用UIPinchGestureRecognizer手勢來實(shí)現(xiàn),還能用UIScorllView來實(shí)現(xiàn),UIScrollView可以輕松的實(shí)現(xiàn)最大與最小縮放值,以及滾動的效果,效果非常棒,具體實(shí)例代碼大家參考下本文吧
    2017-03-03
  • IOS開發(fā)之JSON轉(zhuǎn)PLIST實(shí)例詳解

    IOS開發(fā)之JSON轉(zhuǎn)PLIST實(shí)例詳解

    這篇文章主要介紹了IOS開發(fā)之JSON轉(zhuǎn)PLIST實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • iOS簡單易用的GCD計(jì)時(shí)器的實(shí)現(xiàn)原理

    iOS簡單易用的GCD計(jì)時(shí)器的實(shí)現(xiàn)原理

    在日常開發(fā)中總會碰到需要計(jì)時(shí)器的功能,常見的定時(shí)器有NSTimer、GCD、CADisplayLink。網(wǎng)上也有很多的教程介紹三者的區(qū)別,今天主要講的是GCD這種方式使用以及封裝。感興趣的小伙伴們可以參考一下
    2018-11-11
  • iOS中的UISlider滑塊組件用法總結(jié)

    iOS中的UISlider滑塊組件用法總結(jié)

    不僅是滑動開關(guān),UISlider組件也是常用的進(jìn)度條制作工具,這里我們就一起來看一下iOS中的UISlider滑塊組件用法總結(jié),需要的朋友可以參考下
    2016-06-06
  • iOS13原生端適配攻略(推薦)

    iOS13原生端適配攻略(推薦)

    這篇文章主要介紹了iOS13原生端適配攻略(推薦),現(xiàn)匯總一下iOS 13的各種坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-10-10

最新評論