UIScrollView+PageControl實(shí)現(xiàn)分頁效果

  • 分頁功能(重點(diǎn))
    • 如果圖片名稱有規(guī)律,尺寸也有規(guī)律,那么可以用for循環(huán) 創(chuàng)建imageView

    • 設(shè)置contentSize = CGSizeMake (圖片個(gè)數(shù)*W,H)

      • 細(xì)節(jié):contentSize = CGSizeMake(圖片個(gè)數(shù)*H,O)高度設(shè)置0也可以
      • O代表在垂直方向不能滾動(dòng)
    • 隱藏滾動(dòng)條

      • storyboard :showsHorzontal勾掉
      • 代碼 :showsHorizontal
    • 開啟分頁功能:pagingEnabled = YES

      • 分頁標(biāo)準(zhǔn):以scrollView的尺寸為一頁
    • 顯示頁碼

      • storyboard:UIPage Control控件
        • 因?yàn)閁IPage Control控件是scrollView的子控件會(huì)被scrollView擋住
        • UIPageControl和scrollView同層級(jí),才不會(huì)被擋住
    • 監(jiān)聽滾動(dòng),改變頁碼

      • currentPage
      • 1.當(dāng)scrollView停止?jié)L動(dòng)的時(shí)候顯示頁碼(蘋果)
        • scrollViewDidEndDraggin: willDecelerate:
          • decelerate == NO
            • 計(jì)算頁碼,設(shè)置頁碼
        • scrollViewDidEndDcelerating:
          • 計(jì)算頁碼: 偏移量的x值除以scrollView的寬度
          • 設(shè)置頁碼:currentPage = page
      • 2.哪邊圖片顯示比例大,就滾動(dòng)到哪一頁(示例程序)
        • scrollViewDidScroll:
          • 四舍五入:(int)(小數(shù) + 0.5)
          • page = (int) (contentOffset.x /scrollView.size.W + 0.5)
    • 手動(dòng)設(shè)置總頁數(shù)

      • numberOfPages = 圖片個(gè)數(shù)
      • 圖片個(gè)數(shù)為1時(shí)候,隱藏pageControl
        • 設(shè)置pageControl.alpha = 0.0
        • pageControl.hidden = YES
        • hidesForSinglePage = YES
    • pageControl顯示自定義的圖片

      • 當(dāng)前頁顯示current
      • 其他頁顯示other
      • xcode6.4頭文件中有成員變量
        - xcode6.4之后變成私有的屬性
      • 私有:currentPageImage
      • 私有:pageImage
      • KVC:
        • self.pageControl setValue:[UIImage imageNamed:@"current"]forKeyPath:@"_currentPageImage"
        • self.pageControl setValue:[UIImage imageNamed:@"other"]forKeyPath:@"_pageImage"
    • 每隔一段時(shí)間滾動(dòng)到下一頁

      • 定時(shí)器:每隔一段時(shí)間做一件事情

        • [NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:YES]
      • 計(jì)算下一頁頁碼:當(dāng)前頁碼 + 1

        • currentPage + 1
        • setContentOffset: (頁碼*scrollView的寬度,0)animated:
  • 補(bǔ)充:
    • 定時(shí)器一直在工作,當(dāng)用戶想往前滾動(dòng)的時(shí)候,圖片卻一直往后滾動(dòng)
    • 當(dāng)用戶操作界面的時(shí)候,讓定時(shí)器停止
      • scrollViewWillBeginDragging: 用戶即將拖拽scrollView

        • 停止定時(shí)器
        • 定義定時(shí)器屬性weak,內(nèi)部有一個(gè)看不見的指針在引用
        • [self.timer invalidate]
        • self.timer = nil(屬性是strong時(shí)才寫)
      • scrollViewDidEndDragging:用戶已經(jīng)停止拖拽

        • 開啟定時(shí)器
        • NSTimer scheduledTimerWithTimeInterval:
        • 開啟定時(shí)器方法返回的是一個(gè)自動(dòng)執(zhí)行任務(wù)的定時(shí)器
      • 最好將開啟定時(shí)器,停止定時(shí)器抽兩個(gè)方法

      • 問題:頻繁創(chuàng)建、銷毀定時(shí)器對(duì)象

        • 定時(shí)器特點(diǎn)決定的
    • 注意定時(shí)器方法里,userInfo的作用
  • 線程
    • 線程:用來執(zhí)行任務(wù)的
      • 特點(diǎn):同一時(shí)間只能執(zhí)行一個(gè)任務(wù)
    • 主線程:程序一啟動(dòng),就會(huì)創(chuàng)建一條默認(rèn)的線程
      • 作用:負(fù)責(zé)顯示刷新UI界面,處理與用戶的交互事件
    • [[NSRunloop mainRunloop] addTimer:self.timer forMode:NSRunLoopCommonModes]將定時(shí)器添加到runLoop中
      • 目的:不管主線程在做什么操作,都要分配一定的時(shí)間處理定時(shí)器
      • NSDefaultRunLoopMode:默認(rèn),同一時(shí)間只能執(zhí)行一個(gè)任務(wù)
      • NSRunLoopCommonModes:公用,分配一定的事件處理其他任務(wù)
    • 多線程原理:1s——>一萬個(gè)0.0001s
      • cpu在多個(gè)任務(wù)中來回快速切換
      • 感覺同時(shí)執(zhí)行,那是假象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • #import @class XRCarouselView;typedef void(^ClickBlock)(N...
    猛大不萌閱讀 571評(píng)論 0 0
  • 掌握 UIScrollView的常見屬性 UIScrollView的常用代理方法 UIScrollView的縮放 ...
    JonesCxy閱讀 2,867評(píng)論 1 12
  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,717評(píng)論 1 14
  • 又是一年清明祭,整個(gè)四月也因?yàn)檫@個(gè)節(jié)日蒙上了濃得化不開的哀思,讓人不由地聯(lián)想到了那個(gè)平日里大家諱莫如深,卻又無從回...
    e035443af3e2閱讀 489評(píng)論 1 1
  • 最近被外派到政府工作,上班時(shí)間有彈性制變成了固定的九點(diǎn),這意味著八點(diǎn)半起床的我,要八點(diǎn)半出門。 時(shí)間預(yù)算的很好,7...
    MissPai閱讀 261評(píng)論 0 1

友情鏈接更多精彩內(nèi)容