接口說(shuō)明
- 實(shí)際封裝后的代碼并未用到SDWebImage,僅僅傳入圖片即可。如果要傳入網(wǎng)絡(luò)圖片,在接口外做,降低耦合性。
/**
初始化
@param modelArray 傳入的數(shù)據(jù)模型,必須遵循 bannerInfo 協(xié)議,至少包含圖片和鏈接
@param position 指出pageControl的位置
@param time 每張圖展示的時(shí)間
@param blk 當(dāng)且僅當(dāng)圖片有對(duì)應(yīng)url時(shí)跳轉(zhuǎn)到對(duì)應(yīng)網(wǎng)頁(yè)
*/
-(void)setParamsWithModel: (NSArray<id<bannerInfo>>*) modelArray
pageCtrlPosition:(PAGE_CTRL_POS)position
timeForEachPage:(NSTimeInterval)time
tapBannerCompleteBlk:(BannerBtnCallback)blk;
Github地址
效果
說(shuō)明:圖片來(lái)源:抓的是奇點(diǎn)app的JSON包用來(lái)仿寫(xiě)。
效果圖
控件
前提:
整個(gè)滾動(dòng)的效果是在一個(gè)自定義的UITableViewCell
中實(shí)現(xiàn)的。
- Cell中拉入一個(gè)
ScrollView
填滿
- 注意,將Bounces都去掉,避免滑動(dòng)過(guò)程的彈性效果
- 去掉水平和豎直方向上的滾動(dòng)提示,所以 show H/V indicator也去掉
- 記住要勾選
paging enabled
scrollView設(shè)置 - Cell中再拉入一個(gè)
UIPageControl
,注意這個(gè)pageControl
不是scrollview
的子類,且拉入的順序,否則會(huì)被蓋在scrollview
底下不顯示:
注意順序 - 控件搭配的實(shí)現(xiàn)原理
UIPageControl
的使用目的,主要是指示當(dāng)前滑動(dòng)到的頁(yè)數(shù)。整個(gè)滑動(dòng)效果的實(shí)現(xiàn),主要是通過(guò)UIScrollView
的delegate
,在滑動(dòng)結(jié)束的時(shí)候改變self.pageconrol.currentpage
的值來(lái)實(shí)現(xiàn)的。
具體實(shí)現(xiàn):
- 通過(guò)AFNetworking+SDWebImage 申請(qǐng)到一組網(wǎng)絡(luò)圖片,存成一個(gè)NSArray。這里的實(shí)現(xiàn)過(guò)程不贅述,可參看另一篇筆記。
- 我們要解決的問(wèn)題就是當(dāng)按頁(yè)滾動(dòng)圖片時(shí),滾動(dòng)到最左/最右時(shí),再往左/右滾動(dòng),是要回到最初/最后一張的。假設(shè)我們一共有n張圖片,pagecontrol中肯定要顯示n個(gè)點(diǎn),但是實(shí)際我們scrollView的contentSize寬度只要3倍的寬度就好了。
-
我們假設(shè)每張圖片都作為一個(gè)按鍵的背景圖,那么其實(shí)有如下的設(shè)定:
示意圖 - 每一次scrollview滾動(dòng)結(jié)束,會(huì)調(diào)用delegate中的函數(shù)
滾動(dòng)結(jié)束后要做的事包括:-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
- 根據(jù)滑動(dòng)的偏移量,改變 pagecontrol的currentpage
-
重載圖片
將上面截圖中的三個(gè)UIView(其實(shí)是UIButton),removeFromSuperview,然后根據(jù)self.pagecontrol.currentpage作為下標(biāo),去傳進(jìn)來(lái)的model數(shù)組中找到相應(yīng)的三個(gè)連號(hào)。如下圖
說(shuō)明
-