2017 ...
Это очень легко сделать с современной версией Swift / iOS:
var previousScrollMoment: Date = Date()
var previousScrollX: CGFloat = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let d = Date()
let x = scrollView.contentOffset.x
let elapsed = Date().timeIntervalSince(previousScrollMoment)
let distance = (x - previousScrollX)
let velocity = (elapsed == 0) ? 0 : fabs(distance / CGFloat(elapsed))
previousScrollMoment = d
previousScrollX = x
print("vel \(velocity)")
Конечно, вам нужна скорость в пунктах в секунду, что и есть.
Люди тянут, скажем, 200 - 400 pps (на устройствах 2017 года).
1000 - 3000 - быстрый бросок.
Когда он замедляется до остановки, 20- 30 часто встречается.
Так что очень часто вы будете видеть такой код ..
if velocity > 300 {
// the display is >skimming<
some_global_doNotMakeDatabaseCalls = true
some_global_doNotRenderDiagrams = true
}
else {
// we are not skimming, ok to do calculations
some_global_doNotMakeDatabaseCalls = false
some_global_doNotRenderDiagrams = false
}
Это основа для "скимминга" на мобильных телефонах.(Это большая и сложная тема.)
Обратите внимание, что это не полное решение скимминга;Вы также должны заботиться о необычных случаях, таких как «он остановился», «только что закрытый экран» и т. д. и т. д.