學(xué)習(xí)使用Swift實(shí)現(xiàn)pullToRefresh

最近開始學(xué)習(xí)Swift, 發(fā)現(xiàn)了一個(gè)不錯(cuò)的視頻學(xué)習(xí)網(wǎng)站,最近學(xué)習(xí)了方一雄大師的下拉刷新的教程,在此做以總結(jié)。附上視頻學(xué)習(xí)的鏈接,「iOS提高班」如何制作帶動(dòng)畫的下拉刷新

【總結(jié)幾點(diǎn)實(shí)現(xiàn)刷新的重要步驟】

  1. 滾動(dòng)進(jìn)度跟蹤
    監(jiān)聽UIScrollView的代理方法,獲取當(dāng)前滾動(dòng)的進(jìn)度,滾動(dòng)的進(jìn)度體現(xiàn)在對(duì)UIScrollView的contentOffset.y的改變,而RefreshView的可見區(qū)域,是|contentOffset.y| 與contentInset.top的差

     let refreshViewVisibleHeight = max(0, -scrollView.contentOffset.y - scrollView.contentInset.top)
     progress = min(1.0, refreshViewVisibleHeight/kRefreshWindowHeight)
    

這里使用 max 和 min 方法來處理邊界值情況

  1. 時(shí)差滾動(dòng)
    我們需要在下拉的過程中增加一些動(dòng)畫,來提升用戶體驗(yàn)。這里的核心就是確定動(dòng)畫的起始和結(jié)束位置,我們可以通過移動(dòng)速率來確定起始位置,基本原理就是 s = vt*,至于v的具體值,需根據(jù)需求來定。

     init(view: UIView, centerEnd: CGPoint, parallaxRatio: CGFloat, sceneHeight: CGFloat) {
         self.itemView = view
         self.centerEnd = centerEnd
         self.centerStart = CGPoint(x:centerEnd.x, y:centerEnd.y +   sceneHeight * parallaxRatio)
         self.itemView.center = centerStart
     }
    

parallaxRatio 是速率
sceneHeight 是刷新視圖的高度

根據(jù)之前刷新獲取的progress 來處理item的移動(dòng)

   func updateItemViewWithProgress(progress: CGFloat) {
      self.itemView.center = CGPoint(
          x: self.centerStart.x,
          y: self.centerStart.y - (self.centerStart.y - self.centerEnd.y) * progress
      )
    }
  1. 監(jiān)聽下拉停止,開始網(wǎng)絡(luò)請(qǐng)求刷新

     func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        if !isRefreshing && progress == 1 {
         beginRefreshing()
         targetContentOffset.memory.y = -scrollView.contentInset.top
         delegate?.refreshViewDidRefresh(self)
         }
     }
    

這里沒理解為什么設(shè)置targetContentOffset.memory.y的值,我將該句注釋后還可以正常工作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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