iPhone UIScrollView Speed Check

后端 未结 8 1644
梦如初夏
梦如初夏 2020-11-30 19:31

I know how to get the contentOffset on movement for a UIScrollView, can someone explain to me how I can get an actual number that represents the current speed of a UIScrollV

8条回答
  •  没有蜡笔的小新
    2020-11-30 20:12

    Converted @bandejapaisa answer to Swift 5:

    Properties used by UIScrollViewDelegate:

    var lastOffset: CGPoint = .zero
    var lastOffsetCapture: TimeInterval = .zero
    var isScrollingFast: Bool = false
    

    And the scrollViewDidScroll function:

    func scrollViewDidScroll(scrollView: UIScrollView) {
    
        let currentOffset = scrollView.contentOffset
        let currentTime = Date.timeIntervalSinceReferenceDate
        let timeDiff = currentTime - lastOffsetCapture
        let captureInterval = 0.1
        
        if timeDiff > captureInterval {
            
            let distance = currentOffset.y - lastOffset.y     // calc distance
            let scrollSpeedNotAbs = (distance * 10) / 1000     // pixels per ms*10
            let scrollSpeed = fabsf(Float(scrollSpeedNotAbs))  // absolute value
            
            if scrollSpeed > 0.5 {
                isScrollingFast = true
                print("Fast")
            } else {
                isScrollingFast = false
                print("Slow")
            }
            
            lastOffset = currentOffset
            lastOffsetCapture = currentTime
            
        }
    }
    

提交回复
热议问题