2017-07-31 86 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