? ? ? 在我們學(xué)習(xí)滾動(dòng)視圖UIScrollView中,我們學(xué)習(xí)了循環(huán)滾動(dòng).原理就是n張圖片循環(huán)滾動(dòng)就放n + 2張圖片,第一個(gè)圖片的位置放最后一張圖片,最后一個(gè)圖片的位置放第一張圖片.當(dāng)滾動(dòng)到第一張或者最后一張圖片挺下的瞬間,將偏移量改變成相應(yīng)得偏移量.讓用戶(hù)體驗(yàn)到無(wú)限循環(huán)圖片.
? ? ? 但是這種方法在圖片資源非常多的時(shí)候,UIScrollView 的對(duì)象就會(huì)開(kāi)辟很大一塊空間,但是可以看到的圖片就只有一個(gè)屏幕大小,其他的圖片都在空間中存在著,這樣非常浪費(fèi)系統(tǒng)資源.
? ? ?那么我就來(lái)介紹一下,如何用三塊圖片的空間無(wú)限循環(huán)滾動(dòng)視圖.
? ? ?我們?cè)贏RC模式下編程:
? ? ?首先,我們先將屏幕的寬高,以及ImageView的數(shù)量設(shè)成宏定義,方便接下來(lái)使用.
接下來(lái)我們定義一些接下來(lái)將要使用的屬性,都是在.m文件中的私有屬性.
我們將代碼寫(xiě)在lodeView中,程序是先走lodeView的,寫(xiě)在這里程序運(yùn)行速度會(huì)快上一點(diǎn),根據(jù)個(gè)人喜好.(注意不要忘記[super lodeView])
這里我們要?jiǎng)?chuàng)建一個(gè)后綴名為 .plist的imageInfo文件. 用來(lái)方便以后增加圖片. 我們本次用10張圖片演示.
文件創(chuàng)建步驟如下,
1.將圖片導(dǎo)入工程.
這里要勾選這三個(gè)選項(xiàng),這樣素材就會(huì)復(fù)制一份到你的工程中,就不怕傳給別人時(shí)沒(méi)有圖片了.
2.新建imageInfo文件
這個(gè)文件默認(rèn)是一個(gè)字典類(lèi)型的,<key></key>中放key值,<string></string>中放value,一一對(duì)應(yīng).(注意 圖片名字已經(jīng)被改成0,1,2....9.JPG ?圖片名字不要打錯(cuò), value將會(huì)是圖片上label中的文字)
NSString *path = [[NSBundle mainBundle] pathForResource:@"imageInfo" ofType:@"plist"];
讀取程序包路徑中的資源文件
因?yàn)?self.imageData = [NSMutableDictionary dictionaryWithContentsOfFile:path]; 中imageData是字典類(lèi)型的變量
他可以用文件初始化.
因?yàn)榻酉聛?lái)我們需要用到滾動(dòng)停止事件,所以需要簽協(xié)議:
pageControl的視圖寬高是由圖片數(shù)量決定的,這么寫(xiě)可以動(dòng)態(tài)改變pageControl的寬高.
三張圖片最左邊一張為倒數(shù)第一張圖片,中間為第一張圖片,右邊為第二張圖片.
currentImageIndex初始值設(shè)為0,正好和pageControl的currentPage一一對(duì)應(yīng).
將pageControl的初始位置設(shè)為第一個(gè)小點(diǎn).
當(dāng)圖片滾動(dòng)停止的時(shí)候改變小點(diǎn)位置, 并且將圖片信息賦值.
reload 是自己寫(xiě)的方法.可以實(shí)現(xiàn)循環(huán)滾動(dòng).
更新各個(gè)位置圖片.
currentImageIndex為當(dāng)前圖片下標(biāo).
以1.JPG 2.JPG 3.JPG為例,當(dāng)向右滑動(dòng)時(shí),當(dāng)前圖片的下標(biāo)由2變成(2 + 1) % 10 = 3, 將中間圖片替換, 左圖片下標(biāo)為(3 + 10 - 1) % 10 = 2, 右圖片下標(biāo)為(3 + 1) % 10 = 4;將相應(yīng)位置圖片替換,形成循環(huán)滾動(dòng).(向左滾動(dòng)同理)