Detecting UIScrollView page change

前端 未结 10 2163
鱼传尺愫
鱼传尺愫 2020-12-07 17:11

Is there a way to detect or get a notification when user changes the page in a paging-enabled UIScrollView?

10条回答
  •  無奈伤痛
    2020-12-07 18:11

    How about combining two methods of UIScrollViewDelegate?

    In scrollViewDidEndDragging(_:willDecelerate:), if it stops right away, we do the page calculation; if it is decelerating, we let it go and it will be caught by scrollViewDidEndDecelerating(_:).

    The code is tested with XCode version 7.1.1, Swift version 2.1

    class ViewController: UIViewController, UIScrollViewDelegate {
    
      // MARK: UIScrollViewDelegate
      func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if decelerate == false {
            let currentPage = scrollView.currentPage
            // Do something with your page update
            print("scrollViewDidEndDragging: \(currentPage)")
        }
      }
    
      func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        let currentPage = scrollView.currentPage
        // Do something with your page update
        print("scrollViewDidEndDecelerating: \(currentPage)")
      }
    
    }
    
    extension UIScrollView {
       var currentPage: Int {
          return Int((self.contentOffset.x+ (0.5*self.frame.size.width))/self.frame.width)+1
       }
    }
    

提交回复
热议问题