iOS開(kāi)發(fā)-兩句代碼快速實(shí)現(xiàn)無(wú)限輪播圖(基于ScrollView封裝)

我們?cè)陂_(kāi)發(fā)一些項(xiàng)目的首頁(yè),或者需要信息展示類(lèi)界面的時(shí)候拂封,往往需要用到無(wú)限滾動(dòng)視圖效果茬射,如果每次都要自己寫(xiě)的話(huà),確實(shí)比較費(fèi)勁麻煩一些冒签,筆者秉著簡(jiǎn)單易調(diào)用在抛,功能完備的原則,將無(wú)限滾動(dòng)視圖封裝了一下萧恕,分享給各位觀眾老爺們刚梭,即便是新手,導(dǎo)入頭文件票唆,兩行代碼調(diào)用也可以輕松實(shí)現(xiàn)無(wú)限滾動(dòng)視圖的調(diào)用朴读。

本文主要介紹該框架的使用方法以及相應(yīng)API調(diào)用,文章底部提供demo鏈接走趋,以及實(shí)現(xiàn)原理講解衅金。

先上效果圖:

無(wú)限滾動(dòng)視圖效果圖

倆句調(diào)用代碼:

    //加載滾動(dòng)視圖
    _roundScrollView=[SZKRoundScrollView roundScrollViewWithFrame:CGRectMake(0, 100, SCREEN_WIDTH, 200) imageArr:self.localImageArr timerWithTimeInterval:5 imageClick:^(NSInteger imageIndex) {
        NSLog(@"imageIndex:第%ld個(gè)",imageIndex);
        //在此添加點(diǎn)擊圖片后的操作
    }];
    [self.view addSubview:_roundScrollView];

使用簡(jiǎn)介:

導(dǎo)入SZKRoundScrollView.h頭文件,傳入相應(yīng)的坐標(biāo)frame,圖片數(shù)組(包括網(wǎng)絡(luò)和本地圖片)簿煌,定時(shí)器時(shí)間(給定時(shí)間內(nèi)自動(dòng)向右滑動(dòng)氮唯,如果不需要定時(shí)器的功能可以將該時(shí)間設(shè)置為-1或者比較大的數(shù)),imageClick中可以添加點(diǎn)擊圖片后的操作姨伟,添加代碼 [self.view addSubview:_roundScrollView];將視圖添加到界面上惩琉,便可以實(shí)現(xiàn)無(wú)限滾動(dòng)視圖啦。

API簡(jiǎn)介:

typedef enum : NSUInteger {
    NSPageControlAlignmentCenter,//中間位置
    NSPageControlAlignmentRight,//右邊位置
} NSPageControlAlignment;

@interface SZKRoundScrollView : UIView

/**
 *  小圓點(diǎn)控制器的位置
 */
@property(nonatomic)NSPageControlAlignment pageControlAlignment;
/**
 *  當(dāng)前小圓點(diǎn)顏色
 */
@property(nonatomic,retain)UIColor *curPageControlColor;
/**
 *  其余小圓點(diǎn)顏色
 */
@property(nonatomic,retain)UIColor *otherPageControlColor;

為了提高此框架的健壯性夺荒,筆者提供了以上幾個(gè)屬性瞒渠,可以修改小圓點(diǎn)控制器位置和顏色,位置提供中間和最右邊倆個(gè)位置般堆,默認(rèn)為中間位置在孝。如果各位觀眾老爺還有其他需求,筆者以后慢慢添加淮摔。

    //可以修改的屬性
    //小圓點(diǎn)控制器位置
    _roundScrollView.pageControlAlignment=NSPageControlAlignmentCenter;
    //當(dāng)前小圓點(diǎn)顏色
    _roundScrollView.curPageControlColor=[UIColor yellowColor];
    //其余小圓點(diǎn)顏色
    _roundScrollView.otherPageControlColor=[UIColor orangeColor];

除了提供一些屬性外私沮,還提供了倆個(gè)用來(lái)開(kāi)啟和暫停定時(shí)器的方法,

/**
 *  暫停定時(shí)器
 */
-(void)pasueTimer;
/**
 *  開(kāi)啟定時(shí)器
 */
-(void)startTimer;

因?yàn)榇丝蚣苣J(rèn)開(kāi)啟定時(shí)器和橙,進(jìn)入該頁(yè)面后定時(shí)器會(huì)一直運(yùn)行仔燕,如果進(jìn)入其他頁(yè)面時(shí),可以手動(dòng)關(guān)閉停止器魔招,回到該頁(yè)面時(shí)晰搀,可以重新開(kāi)啟定時(shí)器,算是優(yōu)化性能办斑,節(jié)約內(nèi)存吧外恕。

實(shí)現(xiàn)的方法及原理:

實(shí)現(xiàn)無(wú)限滾動(dòng)視圖的方法大體上分為倆種杆逗,一種是利用collectionView實(shí)現(xiàn)無(wú)限滾動(dòng),因?yàn)閏ollectionView本身存在著復(fù)用的問(wèn)題鳞疲,所以不用擔(dān)心內(nèi)存的消耗問(wèn)題罪郊,就是使用的時(shí)候代碼相對(duì)比較多一點(diǎn),如果感興趣的朋友可以自己研究一下尚洽。
另外一種就是基于scrollView來(lái)實(shí)現(xiàn)啦悔橄,比如我們現(xiàn)在有5張圖片,最簡(jiǎn)單的就是我們直接創(chuàng)建5+2個(gè)腺毫,也就是7個(gè)imageView癣疟,而我們的存放順序?yàn)椋瑘D片5潮酒,圖片1睛挚,圖片2,圖片3澈灼,圖片4竞川,圖片5,圖片1叁熔。默認(rèn)顯示第2張(圖片1)委乌,一直向右滑動(dòng)到第6張(圖片5),再向右滑動(dòng)顯示第7張(圖片1)顯示完成后荣回,將UIScrollView的contentOffset設(shè)置到第2個(gè)imageView上(圖片1)遭贸,這時(shí)候便可繼續(xù)向右滑動(dòng)實(shí)現(xiàn)循環(huán)的效果;同理心软,向左滑動(dòng)時(shí)壕吹,滑動(dòng)到第1張(圖片5)后,將UIScrollView的contentOffset設(shè)置到第6個(gè)imageView上(圖片5)删铃,這樣便可以繼續(xù)向左滑動(dòng)實(shí)現(xiàn)循環(huán)效果耳贬。

性能優(yōu)化:
上面的那種方法,需要我們創(chuàng)建n+2個(gè)imageView,而這些imageView都需要加載到內(nèi)存中去猎唁,所以還有一種簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)咒劲,只需要?jiǎng)?chuàng)建三個(gè)imageView便可以實(shí)現(xiàn)無(wú)限循環(huán)了(事實(shí)上,只需要倆個(gè)imageView便可以實(shí)現(xiàn)诫隅,但是筆者沒(méi)有過(guò)多的去思考腐魂,感興趣的朋友可以自己研究研究)筆者正是基于三個(gè)imageView來(lái)實(shí)現(xiàn)無(wú)限滾動(dòng)視圖的。

實(shí)現(xiàn)原理:
比如有5張圖片逐纬,創(chuàng)建三個(gè)imageView蛔屹,分別展示圖片5,圖片1豁生,圖片2兔毒,默認(rèn)展示第二張(圖片1)漫贞,向右滑動(dòng)顯示第3張(圖片2),顯示完成后育叁,將scrollView的contentOffset重新設(shè)置到中間圖片绕辖,并根據(jù)引用計(jì)數(shù)+1,重新刷新圖片擂红,三個(gè)imageView分別展示為,圖片1围小,圖片2昵骤,圖片3,這時(shí)候就相當(dāng)于圖片2在中間肯适,圖片3在右邊变秦。同理再次向右滑動(dòng),顯示圖片第3張(圖片3)框舔,顯示完成后蹦玫,再將scrollView的contentOffset重新設(shè)置到中間圖片上面,并根據(jù)引用計(jì)數(shù)+1刘绣,重新刷新圖片樱溉,三個(gè)imageView分別展示為圖片2,圖片3纬凤,圖片4福贞,這時(shí)候就相當(dāng)于圖片3在中間,圖片4在右邊停士,依次下去挖帘,便可實(shí)現(xiàn)無(wú)限循環(huán)。

備注:
1.輪播圖加載網(wǎng)絡(luò)圖片時(shí)恋技,筆者利用的是SDWebImage來(lái)實(shí)現(xiàn)加載網(wǎng)絡(luò)圖片的拇舀,如果項(xiàng)目中沒(méi)有SDWebImage,請(qǐng)先導(dǎo)入該框架蜻底,SDWebImage鏈接:https://github.com/rs/SDWebImage
2.筆者這種封裝方法可能并不是最好的骄崩,但是基本功能都可以實(shí)現(xiàn)了,并且調(diào)用簡(jiǎn)單朱躺,可維護(hù)性高刁赖,對(duì)于一些懶人或者新手可以直接拿去使用,如果使用過(guò)程中出現(xiàn)問(wèn)題长搀,或者需要添加需求宇弛,可以聯(lián)系筆者在修改修改。
3.SZKRoundScrollViewDemo(無(wú)限輪播滾動(dòng)圖demo)鏈接:https://github.com/18811314750/SZKRoundScrollView

筆者的其他文章:
iOS開(kāi)發(fā)-輕松學(xué)會(huì)封裝自定義視圖view(自定義彈框封裝詳解)
http://www.reibang.com/p/de2ecfd770c2

iOS開(kāi)發(fā)-一句代碼調(diào)用實(shí)現(xiàn)網(wǎng)絡(luò)的監(jiān)測(cè)功能(基于AFNetworkReachabilityManager的封裝)
http://www.reibang.com/p/b901ad0c1d81

如果有不足或者錯(cuò)誤的地方還望各位讀者批評(píng)指正源请,可以評(píng)論留言枪芒,筆者收到后第一時(shí)間回復(fù)彻况。
QQ/微信:790057066 。
簡(jiǎn)書(shū)號(hào):iOS_凱:http://www.reibang.com/users/86b0ddc92021/latest_articles
GitHub個(gè)人主頁(yè)(歡迎star):https://github.com/18811314750

感謝各位觀眾老爺?shù)拈喿x舅踪,如果覺(jué)得筆者寫(xiě)的還湊合纽甘,可以關(guān)注或收藏一下,不定期分享一些好玩的實(shí)用的demo給大家抽碌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悍赢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子货徙,更是在濱河造成了極大的恐慌左权,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痴颊,死亡現(xiàn)場(chǎng)離奇詭異赏迟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蠢棱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)锌杀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人泻仙,你說(shuō)我怎么就攤上這事糕再。” “怎么了饰豺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵亿鲜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我冤吨,道長(zhǎng)蒿柳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任漩蟆,我火速辦了婚禮垒探,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怠李。我一直安慰自己圾叼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布捺癞。 她就那樣靜靜地躺著夷蚊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪髓介。 梳的紋絲不亂的頭發(fā)上惕鼓,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音唐础,去河邊找鬼箱歧。 笑死矾飞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呀邢。 我是一名探鬼主播洒沦,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼价淌!你這毒婦竟也來(lái)了申眼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝉衣,失蹤者是張志新(化名)和其女友劉穎豺型,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體买乃,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年钓辆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剪验。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡前联,死狀恐怖功戚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情似嗤,我是刑警寧澤啸臀,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站烁落,受9級(jí)特大地震影響乘粒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伤塌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一灯萍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧每聪,春花似錦旦棉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至童本,卻和暖如春真屯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巾陕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工讨跟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纪他,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓晾匠,卻偏偏與公主長(zhǎng)得像茶袒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凉馆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)薪寓、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,109評(píng)論 4 62
  • 我們?cè)陂_(kāi)發(fā)一些項(xiàng)目的首頁(yè)澜共,或者需要信息展示類(lèi)界面的時(shí)候向叉,往往需要用到無(wú)限滾動(dòng)視圖效果,如果每次都要自己寫(xiě)的話(huà)嗦董,確實(shí)...
    不作不會(huì)死閱讀 1,341評(píng)論 0 2
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,768評(píng)論 22 665
  • 很久沒(méi)有寫(xiě)東西了母谎,不論是看電影以后那突然一瞬間的沖動(dòng),還是日常生活里微小的感動(dòng)京革,似乎當(dāng)時(shí)有過(guò)很強(qiáng)烈的念頭想要記錄下...
    親愛(ài)的海林先生閱讀 377評(píng)論 0 1
  • 提到紀(jì)曉波匹摇,想必大家想到的首先就是商業(yè)大佬咬扇、霸道總裁、年輕有為這一類(lèi)的字眼廊勃。而事實(shí)上懈贺,霸道與否不予置評(píng),但...
    檸檬樹(shù)下的守望閱讀 1,178評(píng)論 0 0