TechChain
TechChain

Reputation: 8944

Issue with scrollViewDidEndDecelerating in iOS swift?

I am using pagination to load records in my app. I am using below code to for this purpose. When scroll down fast then method (self.scrollViewMethod(scrollView)) is called multiple times. Please tell me how can I prevent this?

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)
                }
            }
        }
    }

Upvotes: 1

Views: 740

Answers (1)

Anbu.Karthik
Anbu.Karthik

Reputation: 82759

for 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)
}

option 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
    }
}

Upvotes: 1

Related Questions