2017-07-31 82 views
0

我正在使用分頁在我的應用中加載記錄。我正在使用下面的代碼來達到這個目的。當快速向下滾動時,方法(self.scrollViewMethod(scrollView))被多次調用。請告訴我如何防止這種情況?Swift中的scrollViewDidEndDecelerating問題?

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
    print("scrollViewDidEndDecelerating") 

    self.scrollViewMethod(scrollView) 
} 


func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    if !decelerate { 
     print("scrollViewDidEndDragging") 
     self.scrollViewMethod(scrollView) 

    } 
} 



func scrollViewMethod(_ scrollView : UIScrollView) { 
     if scrollView == mainScrolView { 
      self.scrollMove() 
     } 

     else if scrollView == tblListing || scrollView == Table || scrollView == JobTable { 
      if scrollView.contentSize.height <= (scrollView.contentOffset.y + scrollView.frame.size.height + 20) { 

       if presentTap == 1 && loadMoreAll && arrAll.count >= limitCheck { 
        self.searchService(false) 
       } 

       else if presentTap == 3 && loadMoreUrgent && arrUrgentJobs.count >= limitCheck { 
        self.urgentSearchService(false) 
       } 

       else if presentTap == 2 && loadMoreJob && arrJobs.count >= limitCheck { 
        self.searchJobService(isRefresh: false) 
       } 
      } 
     } 
    } 
+0

當用戶向下滾動快則跳過多個頁面? –

+0

使用'cancelPreviousPerformRequests'移除以前的調用 –

+0

在我的情況下scrollviewdidenddecelerating調用兩次 – Techiee

回答

1

爲e.g

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) { 
    NSObject.cancelPreviousPerformRequests(withTarget: self) 
    //print("called here"); 
} 

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
    print("scrollViewDidEndDecelerating") 

    perform(#selector(self.scrollViewDidEndScrollingAnimation), with: scrollView, afterDelay: 0.2) 
} 

選項2

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    let offset: CGPoint = scrollView.contentOffset 
    let bounds: CGRect = scrollView.bounds 
    let size: CGSize = scrollView.contentSize 
    let inset: UIEdgeInsets = scrollView.contentInset 
    let y: Float = Float(offset.y + bounds.size.height - inset.bottom) 
    let h: Float = Float(size.height) 
    let reload_distance: Float = 50 
    if y > h + reload_distance { 
     // call your load more actions 
    } 
} 
+0

我應該使用哪種方法? – Techiee

+0

@deepakkumar - 選擇是你的,使用任何一個選項 –

+0

如果我使用你的選項2,那麼我需要使用我的代碼 – Techiee