一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - IOS使用UICollectionView實現無限輪播效果

IOS使用UICollectionView實現無限輪播效果

2021-01-12 16:06yixiangboy IOS

這篇文章主要為大家詳細介紹了IOS使用UICollectionView實現無限輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、案例演示

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

IOS使用UICollectionView實現無限輪播效果

二、知識儲備

2.1、uicollectionview橫向布局

只需要設置uicollectionviewflowlayout的scrolldirection為uicollectionviewscrolldirectionhorizontal即可。

2.2、nstimer的基本使用

nstimer的初始化:

 

復制代碼 代碼如下:
 + (nstimer *)scheduledtimerwithtimeinterval:(nstimeinterval)ti target:(id)atarget selector:(sel)aselector userinfo:(nullable id)userinfo repeats:(bool)yesorno;

 

1)、(nstimeinterval)ti : 預訂一個timer,設置一個時間間隔。
表示輸入一個時間間隔對象,以秒為單位,一個>0的浮點類型的值,如果該值<0,系統會默認為0.1。
2)、target:(id)atarget : 表示發(fā)送的對象,如self
3)、selector:(sel)aselector : 方法選擇器,在時間間隔內,選擇調用一個實例方法
4)、userinfo:(nullable id)userinfo : 需要傳參,可以為nil
5)、repeats:(bool)yesorno : 當yes時,定時器會不斷循環(huán)直至失效或被釋放,當no時,定時器會循環(huán)發(fā)送一次就失效。
開啟定時器:

 

復制代碼 代碼如下:
[[nsrunloop mainrunloop] addtimer:timer formode:nsrunloopcommonmodes];

 

關閉定時器:

[self.timer invalidate];

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

初始化的時候,我們默認開啟定時器,定時執(zhí)行切換到下一張圖片的函數。當用戶觸摸到view的時候,我們則要關閉定時器,手動的進行uicollectionview的切換。當用戶的手離開了view,我們要重新打開定時器,進行自動輪播的切換。

三、關鍵代碼分析

3.1、生成uicollectionviewflowlayout對象,設置他的滾動方向為水平滾動  

?
1
2
3
4
uicollectionviewflowlayout *flowlayout = [[uicollectionviewflowlayout alloc] init];
flowlayout.itemsize = cgsizemake(screen_width, 200);
flowlayout.scrolldirection = uicollectionviewscrolldirectionhorizontal;
flowlayout.minimumlinespacing = 0;

3.2、初始化uicollectionview對象 

?
1
2
3
4
5
6
7
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代理方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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、定時器的開啟和關閉

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#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、手動切換 和 自動輪播 的切換

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-(void) scrollviewwillbegindragging:(uiscrollview *)scrollview{
 [self removetimer];
}
 
#pragma mark 當用戶停止的時候調用
-(void) scrollviewdidenddragging:(uiscrollview *)scrollview willdecelerate:(bool)decelerate{
 [self addtimer];
 
}
 
#pragma mark 設置頁碼
-(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的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-(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

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS開發(fā)技巧之狀態(tài)欄字體顏色的設置方法

    iOS開發(fā)技巧之狀態(tài)欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態(tài)欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發(fā)技巧之狀態(tài)欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS開發(fā)之視圖切換

    iOS開發(fā)之視圖切換

    在iOS開發(fā)中視圖的切換是很頻繁的,獨立的視圖應用在實際開發(fā)過程中并不常見,除非你的應用足夠簡單。在iOS開發(fā)中常用的視圖切換有三種,今天我們將...

    執(zhí)著丶執(zhí)念5272021-01-16
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發(fā)過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
主站蜘蛛池模板: 农村美女沟厕嘘嘘被偷看 | 国产高清日韩 | 1986葫芦兄弟全集免费观看第十集 | 国产精品日韩欧美在线 | 日韩欧美推理片免费看完整版 | 欧美特级特黄a大片免费 | 手机在线免费观看日本推理片 | 高跟丝袜人妖sissy露出调教 | 亚洲精品视频网 | 无码骚夜夜精品 | 青草国产在线视频 | 晓雪老师我要进你里面好爽 | 日一日操一操 | 亚洲小视频在线 | china精品对白普通话 | 国产成人成人一区二区 | 极限淫生小说 | 国产一页| 毛片免费在线视频 | 轻轻操在线视频 | 肉车各种play文r | 香蕉tv国产在线永久播放 | 色播影音先锋 | 好男人资源免费播放在线观看 | 性bbbbwwbbbb | 2021精品国夜夜天天拍拍 | 国产成人福利色视频 | 免费一看一级欧美 | 女子张腿让男人桶免费 | 从后面撕开老师的丝袜动态图 | 99精品在线| 天天操天天干天天 | 九色PORNY丨视频入口 | 欧美一区二区三区在线观看不卡 | 91精品啪在线观看国产日本 | 亚洲同性男男gay1069 | 日出水了特别黄的视频 | aaa一级特黄| 无码骚夜夜精品 | 亚洲精品国产一区二区第一页 | 四虎新网站 |