A UIScrollViewdengan paging diaktifkan akan berhenti di kelipatan lebar frame (atau tinggi). Jadi, langkah pertama adalah mencari tahu seberapa lebar halaman yang Anda inginkan. Buat itu menjadi lebar file UIScrollView. Kemudian, atur ukuran subview Anda betapapun besar yang Anda inginkan, dan atur pusatnya berdasarkan kelipatan UIScrollViewlebarnya.
Kemudian, karena Anda ingin melihat halaman lain, tentu saja, ditetapkan clipsToBoundsuntuk NOsebagai mhjoy dinyatakan. Bagian triknya sekarang adalah membuatnya menggulir ketika pengguna memulai tarik di luar rentang UIScrollViewbingkai. Solusi saya (ketika saya harus melakukan ini baru-baru ini) adalah sebagai berikut:
Buat UIViewsubclass (yaitu ClipView) yang akan berisi UIScrollViewdan subviews itu. Pada dasarnya, itu harus memiliki kerangka dari apa yang Anda anggap UIScrollViewakan terjadi dalam keadaan normal. Tempatkan UIScrollViewdi tengah ClipView. Pastikan ClipView's clipsToBoundsdisetel ke YESjika lebarnya kurang dari tampilan induknya. Juga, ClipViewkebutuhan referensi ke UIScrollView.
Langkah terakhir adalah mengganti - (UIView *)hitTest:withEvent:di dalam ClipView.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Ini pada dasarnya memperluas area sentuh UIScrollViewke bingkai tampilan induknya, persis seperti yang Anda butuhkan.
Pilihan lain adalah melakukan subkelas UIScrollViewdan mengganti - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventmetodenya, namun Anda masih memerlukan tampilan kontainer untuk melakukan pemotongan, dan mungkin sulit untuk menentukan kapan harus kembali YEShanya berdasarkan UIScrollViewbingkai.
CATATAN: Anda juga harus melihat hitTest: withEvent: modifikasi Juri Pakaste jika Anda mengalami masalah dengan interaksi pengguna subview.