มีคำตอบที่ดีอยู่แล้ว อย่างไรก็ตามสำหรับสถานการณ์ที่เนื้อหาไม่พอดีกับหน้าทั้งหมด - และหากชอบฉันคุณต้องการใช้ผลลัพธ์สำหรับ 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
เพื่อรับหน้าปัจจุบันเมื่อผู้ใช้เลื่อน!