最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IOS使用UICollectionView實現(xiàn)無限輪播效果

 更新時間:2016年03月24日 16:39:41   作者:yixiangboy  
這篇文章主要為大家詳細(xì)介紹了IOS使用UICollectionView實現(xiàn)無限輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、案例演示

本案例Demo演示的是一個首頁輪播的案例,支持手動輪播和自動輪播。知識點主要集中在UICollectionView和NSTimer的使用。

二、知識儲備

2.1、UICollectionView橫向布局

只需要設(shè)置UICollectionViewFlowLayout的scrollDirection為UICollectionViewScrollDirectionHorizontal即可。

2.2、NSTimer的基本使用

NSTimer的初始化:

復(fù)制代碼 代碼如下:
 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;

1)、(NSTimeInterval)ti : 預(yù)訂一個Timer,設(shè)置一個時間間隔。
表示輸入一個時間間隔對象,以秒為單位,一個>0的浮點類型的值,如果該值<0,系統(tǒng)會默認(rèn)為0.1。
2)、target:(id)aTarget : 表示發(fā)送的對象,如self
3)、selector:(SEL)aSelector : 方法選擇器,在時間間隔內(nèi),選擇調(diào)用一個實例方法
4)、userInfo:(nullable id)userInfo : 需要傳參,可以為nil
5)、repeats:(BOOL)yesOrNo : 當(dāng)YES時,定時器會不斷循環(huán)直至失效或被釋放,當(dāng)NO時,定時器會循環(huán)發(fā)送一次就失效。

開啟定時器:

復(fù)制代碼 代碼如下:
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

關(guān)閉定時器:

[self.timer invalidate];

2.3、自動輪播和手動輪播的切換

初始化的時候,我們默認(rèn)開啟定時器,定時執(zhí)行切換到下一張圖片的函數(shù)。當(dāng)用戶觸摸到View的時候,我們則要關(guān)閉定時器,手動的進(jìn)行UICollectionView的切換。當(dāng)用戶的手離開了View,我們要重新打開定時器,進(jìn)行自動輪播的切換。

三、關(guān)鍵代碼分析

3.1、生成UICollectionViewFlowLayout對象,設(shè)置他的滾動方向為水平滾動  

 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
 flowLayout.itemSize = CGSizeMake(SCREEN_WIDTH, 200);
 flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
 flowLayout.minimumLineSpacing = 0;

3.2、初始化UICollectionView對象 

 UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.navBarHeight, SCREEN_WIDTH, 200) collectionViewLayout:flowLayout];
 collectionView.delegate = self;
 collectionView.dataSource = self;
 collectionView.showsHorizontalScrollIndicator = NO;
 collectionView.pagingEnabled = YES;
 collectionView.backgroundColor = [UIColor clearColor];
 [self.view addSubview:collectionView];

3.3、UICollectionView的UICollectionViewDataSource代理方法

#pragma mark- UICollectionViewDataSource
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
 return YYMaxSections;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
 return self.newses.count;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{


 YYCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:YYIDCell forIndexPath:indexPath];
 if(!cell){
 cell = [[YYCell alloc] init];
 }
 cell.news=self.newses[indexPath.item];
 return cell;
}

3.4、定時器的開啟和關(guān)閉

#pragma mark 添加定時器
-(void) addTimer{
 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(nextpage) userInfo:nil repeats:YES];
 [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
 self.timer = timer ;

}

#pragma mark 刪除定時器
-(void) removeTimer{
 [self.timer invalidate];
 self.timer = nil;
}

3.5、手動切換 和 自動輪播 的切換

-(void) scrollViewWillBeginDragging:(UIScrollView *)scrollView{
 [self removeTimer];
}

#pragma mark 當(dāng)用戶停止的時候調(diào)用
-(void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
 [self addTimer];

}

#pragma mark 設(shè)置頁碼
-(void) scrollViewDidScroll:(UIScrollView *)scrollView{
 int page = (int) (scrollView.contentOffset.x/scrollView.frame.size.width+0.5)%self.newses.count;
 self.pageControl.currentPage =page;
}

3.6、自動輪播切換到下一個View的方法

-(void) nextpage{
 NSIndexPath *currentIndexPath = [[self.collectionView indexPathsForVisibleItems] lastObject];

 NSIndexPath *currentIndexPathReset = [NSIndexPath indexPathForItem:currentIndexPath.item inSection:YYMaxSections/2];
 [self.collectionView scrollToItemAtIndexPath:currentIndexPathReset atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];

 NSInteger nextItem = currentIndexPathReset.item +1;
 NSInteger nextSection = currentIndexPathReset.section;
 if (nextItem==self.newses.count) {
 nextItem=0;
 nextSection++;
 }
 NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:nextItem inSection:nextSection];

 [self.collectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}

Demo下載地址:https://github.com/yixiangboy/YXCollectionView

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • iOS NSCache和NSUrlCache緩存類實現(xiàn)示例詳解

    iOS NSCache和NSUrlCache緩存類實現(xiàn)示例詳解

    這篇文章主要為大家介紹了iOS NSCache和NSUrlCache緩存類實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • iOS簡單實現(xiàn)輪播圖效果

    iOS簡單實現(xiàn)輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了iOS簡單實現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • iOS實現(xiàn)貝塞爾曲線動畫

    iOS實現(xiàn)貝塞爾曲線動畫

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)貝塞爾曲線動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 解決ios手機中input輸入框光標(biāo)過長的問題

    解決ios手機中input輸入框光標(biāo)過長的問題

    在項目中做移動端頁面,發(fā)現(xiàn)IOS 的光標(biāo)大小很大,和安卓的完全不一樣,怎么來調(diào)整大小呢?下面小編給大家?guī)砹薸os手機中input輸入框光標(biāo)過長問題的解決方法,一起看看吧
    2018-08-08
  • iOS中UILabel設(shè)置居上對齊、居中對齊、居下對齊及文字置頂顯示

    iOS中UILabel設(shè)置居上對齊、居中對齊、居下對齊及文字置頂顯示

    這篇文章主要給大家介紹了關(guān)于iOS中UILabel如何設(shè)置居上對齊、居中對齊、居下對齊及文字置頂顯示效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • iOS 底層alloc init new 源碼流程示例分析

    iOS 底層alloc init new 源碼流程示例分析

    這篇文章主要為大家介紹了iOS 底層alloc init new 源碼流程示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 教你如何解決XCODE升級后插件不能用問題

    教你如何解決XCODE升級后插件不能用問題

    Xcode 每次更新有個很頭疼的問題,就是插件都會失效,要重裝。 不得不說好多插件還是非常方便能提高效率。那么如何來解決這個問題呢,今天我們就來探討下。
    2015-11-11
  • iOS NSURLSessionDownloadTask實現(xiàn)文件斷點下載的方法

    iOS NSURLSessionDownloadTask實現(xiàn)文件斷點下載的方法

    本篇文章主要介紹了iOS NSURLSessionDownloadTask實現(xiàn)文件斷點下載的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • XCODE Debug模式資料整理

    XCODE Debug模式資料整理

    這篇文章主要介紹了XCODE Debug模式資料整理的相關(guān)資料,開發(fā)APP應(yīng)用肯定會用到Debug來調(diào)試程序,這里就細(xì)致的講解下debug資料,需要的朋友可以參考下
    2016-11-11
  • 談一談iOS單例模式

    談一談iOS單例模式

    這篇文章主要和大家談一談iOS中的單例模式,單例模式是一種常用的軟件設(shè)計模式,想要深入了解iOS單例模式的朋友可以參考一下
    2016-05-05

最新評論

遂川县| 吴桥县| 麟游县| 嘉善县| 昌都县| 沁源县| 安图县| 东至县| 上思县| 磐安县| 石狮市| 明光市| 徐汇区| 林甸县| 蚌埠市| 定远县| 奉化市| 苏尼特右旗| 金寨县| 连云港市| 靖西县| 平安县| 商河县| 包头市| 巩留县| 银川市| 丰都县| 淮南市| 永清县| 揭东县| 北宁市| 锦州市| 博湖县| 开阳县| 龙江县| 墨玉县| 余姚市| 双流县| 唐山市| 洛扎县| 元氏县|