UIScrollView+UIPageControl實(shí)現(xiàn)廣告頁(yè)Banner滾動(dòng)效果

接口說(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地址

自動(dòng)回滾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ò)UIScrollViewdelegate,在滑動(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ù)
    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    
    滾動(dòng)結(jié)束后要做的事包括:
    • 根據(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ō)明
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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