มีคำตอบที่ดีอยู่แล้ว อย่างไรก็ตามสำหรับสถานการณ์ที่เนื้อหาไม่พอดีกับหน้าทั้งหมด - และหากชอบฉันคุณต้องการใช้ผลลัพธ์สำหรับ a UIPageControlก็จำเป็นต้องใช้ceilฟังก์ชันนี้
ลองมาดูตัวอย่างที่ฉันมีเนื้อหา "สี่หน้าบิต"
ฉันจะอิงตามตัวอย่างชีวิตจริงในปัจจุบันของฉัน ขนาดเนื้อหากว้าง 3140 พอยต์ ขึ้นอยู่กับขนาดเฟรมมุมมองคอลเลกชันของฉันความกว้างของหน้าคือ 728
จำนวนหน้าจึงเท่ากับ:
3140 / 728 = 4.313
ฉันnumberOfPagesจะอายุห้าขวบ ซึ่งสี่รายการจะแสดงอย่างครบถ้วนและหน้าสุดท้าย - หน้าที่ห้า - จะแสดง0.313เนื้อหาที่เหลืออยู่
ตอนนี้numberOfPagesการเป็นห้าหมายความว่าดัชนีหน้าจะเป็น 0, 1, 2, 3 และ 4
เมื่อฉันปัดไปทางขวาเลื่อนหน้าไปทางออฟเซ็ตสุดท้ายscrollViewDidEndDeceleratingเมธอดจะให้ค่าชดเชย X สุดท้ายเป็น 2412
ใช้การคำนวณการปัดเศษ:
2412 / 728 = 3.313 then rounded = 3
ไม่ถูกต้อง ผู้ใช้เพจกำลังดูโดยออฟเซ็ตควรเป็น:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
การคำนวณที่ถูกต้องโดยใช้ceil:
private func pageForOffset(offset:CGFloat, pageWidth width:CGFloat) -> Int
{
let page = Int(ceil(offset / width))
NSLog("\(__FUNCTION__) offset \(offset) width \(width) page \(page) ")
return page
}
UIScrollViewDelegateเพื่อรับหน้าปัจจุบันเมื่อผู้ใช้เลื่อน!