ใน iOS เวอร์ชันก่อนหน้าบางรุ่น (เช่น iOS 9, 10) scrollViewDidEndDecelerating
จะไม่ถูกเรียกใช้หาก scrollView หยุดทำงานทันทีโดยการแตะ
แต่ในเวอร์ชั่นปัจจุบัน (iOS 13) scrollViewDidEndDecelerating
จะถูกเรียกใช้อย่างแน่นอน (เท่าที่ฉันรู้)
ดังนั้นหากแอปของคุณกำหนดเป้าหมายเวอร์ชันก่อนหน้าเช่นกันคุณอาจต้องแก้ไขปัญหาเช่นเดียวกับที่แอชลีย์สมาร์ทพูดถึงหรือคุณสามารถแก้ไขได้
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
}
คำอธิบาย
UIScrollView จะหยุดในสามวิธี:
- เลื่อนและหยุดอย่างรวดเร็วด้วยตัวเอง
- เลื่อนและหยุดได้อย่างรวดเร็วด้วยการสัมผัสนิ้ว (เช่นเบรกฉุกเฉิน)
- เลื่อนช้าและหยุด
วิธีแรกสามารถตรวจพบได้scrollViewDidEndDecelerating
และวิธีอื่น ๆ ที่คล้ายกันในขณะที่อีกสองวิธีไม่สามารถทำได้
โชคดีที่UIScrollView
มีสามสถานะที่เราสามารถใช้เพื่อระบุพวกเขาซึ่งใช้ในสองบรรทัดแสดงความคิดเห็นโดย "// 1" และ "// 2"