ปรับ ScrollView ให้เลื่อนทีละครึ่งหน้า
สวัสดีครับ
หลังจากหัดเขียน iPhone ก็เจอปัญหากับ ScrollView
ต้องการให้เลื่อนที่ละครึ่งหน้า แต่เมื่อใช้ pagingEnabled เมื่อเลื่อน ScrollView Page จะเลื่อนที่ละหน้า…
พอลองทำก็เจอปัญหาหลายๆ อย่าง กระตุกบ้าง หยุดไม่ได้บ้าง
สุดท้ายก็ไปหาวิธีการได้ (จำเว็บไม่ได้)
สิ่งที่เราต้องทำคือ Implement Delegate Method ของ UIScrollView ที่ชื่อ
- (void) scrollViewDidScroll:(UIScrollView *)scrollView;
ซึ่งจะทำงานเมื่อเกิดการเลื่อน
ตัวอย่าง Code
สร้าง UIScrollView แล้วกำหนด pagingEnabled = YES ก่อนนะครับ
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat offset = scrollView.contentOffset.x / 2;
CGAffineTransform transform = CGAffineTransformMakeTranslation(offset, 0);
[_contentController.view setTransform:transform];
}
เมื่อเกิดการเลื่อนก็ให้ใช้ AffineTransform transform เลื่อนส่วนที่เป็น Content (ในี่นี้จะเลื่อนที่ละครึ่งหน้า)
หลังจากลองใช้งานดูก็พบว่ามีปัญหานิดหน่อยครับ
คือเมื่อ Paging ทำงานจำนวน Page จะถูกคำนวณไว้ ซึ่งทำให้เราเลื่อนได้เท่ากับจำนวนหน้าที่คำนวณไว้
จากตัวอย่างถ้า เราทำไว้ 10 หน้าแล้วให้เลื่อนไปทีละครึ่งหน้าเราจะไปได้แค่หน้าที่ 5
วิธีแก้ไขง่ายๆ คือเพิ่มขนาดของ ContentView ขึ่้น 2 เท่าเราก็จะสามารถเลื่อนได้จนหน้าสุดท้ายครับ