A UIScrollView
dengan 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 UIScrollView
lebarnya.
Kemudian, karena Anda ingin melihat halaman lain, tentu saja, ditetapkan clipsToBounds
untuk NO
sebagai mhjoy dinyatakan. Bagian triknya sekarang adalah membuatnya menggulir ketika pengguna memulai tarik di luar rentang UIScrollView
bingkai. Solusi saya (ketika saya harus melakukan ini baru-baru ini) adalah sebagai berikut:
Buat UIView
subclass (yaitu ClipView
) yang akan berisi UIScrollView
dan subviews itu. Pada dasarnya, itu harus memiliki kerangka dari apa yang Anda anggap UIScrollView
akan terjadi dalam keadaan normal. Tempatkan UIScrollView
di tengah ClipView
. Pastikan ClipView
's clipsToBounds
disetel ke YES
jika lebarnya kurang dari tampilan induknya. Juga, ClipView
kebutuhan 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 UIScrollView
ke bingkai tampilan induknya, persis seperti yang Anda butuhkan.
Pilihan lain adalah melakukan subkelas UIScrollView
dan mengganti - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
metodenya, namun Anda masih memerlukan tampilan kontainer untuk melakukan pemotongan, dan mungkin sulit untuk menentukan kapan harus kembali YES
hanya berdasarkan UIScrollView
bingkai.
CATATAN: Anda juga harus melihat hitTest: withEvent: modifikasi Juri Pakaste jika Anda mengalami masalah dengan interaksi pengguna subview.