Trên một số phiên bản iOS trước đó (như iOS 9, 10), scrollViewDidEndDecelerating
sẽ không được kích hoạt nếu cuộn Xem đột ngột bị dừng khi chạm vào.
Nhưng trong phiên bản hiện tại (iOS 13), scrollViewDidEndDecelerating
chắc chắn sẽ được kích hoạt (Theo như tôi biết).
Vì vậy, nếu Ứng dụng của bạn cũng nhắm mục tiêu các phiên bản trước đó, bạn có thể cần một cách giải quyết như phiên bản được đề cập bởi Ashley Smart hoặc bạn có thể sử dụng phiên bản sau.
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if !scrollView.isTracking, !scrollView.isDragging, !scrollView.isDecelerating { // 1
scrollViewDidEndScrolling(scrollView)
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate, scrollView.isTracking, !scrollView.isDragging, !scrollView.isDecelerating { // 2
scrollViewDidEndScrolling(scrollView)
}
}
func scrollViewDidEndScrolling(_ scrollView: UIScrollView) {
// Do something here
}
Giải trình
UIScrollView sẽ bị dừng theo ba cách:
- nhanh chóng cuộn và dừng lại
- nhanh chóng cuộn và dừng bằng cách chạm ngón tay (như phanh khẩn cấp)
- cuộn từ từ và dừng lại
Phương pháp đầu tiên có thể được phát hiện bằng scrollViewDidEndDecelerating
và các phương pháp tương tự khác trong khi hai phương pháp khác không thể.
May mắn thay, UIScrollView
có ba trạng thái chúng ta có thể sử dụng để xác định chúng, được sử dụng trong hai dòng được nhận xét bởi "// 1" và "// 2".