A UIScrollView
có bật phân trang sẽ dừng lại ở bội số chiều rộng (hoặc chiều cao) của khung. Vì vậy, bước đầu tiên là xác định độ rộng bạn muốn các trang của mình. Làm cho chiều rộng của UIScrollView
. Sau đó, đặt kích thước của lượt xem phụ của bạn lớn đến mức nào bạn cần và đặt tâm của chúng dựa trên bội số UIScrollView
của chiều rộng.
Sau đó, vì bạn muốn xem các trang khác, tất nhiên, hãy đặt clipsToBounds
thành NO
như mhjoy đã nêu. Phần thủ thuật bây giờ là làm cho nó cuộn khi người dùng bắt đầu kéo bên ngoài phạm vi của UIScrollView
khung hình. Giải pháp của tôi (khi tôi phải làm điều này rất gần đây) là như sau:
Tạo một UIView
lớp con (tức là ClipView
) sẽ chứa các lượt xem con UIScrollView
và của nó. Về cơ bản, nó phải có khung của những gì bạn cho là UIScrollView
sẽ có trong các trường hợp bình thường. Đặt UIScrollView
ở giữa ClipView
. Đảm bảo rằng ClipView
's clipsToBounds
được đặt thành YES
nếu chiều rộng của nó nhỏ hơn chiều rộng của chế độ xem gốc. Ngoài ra, ClipView
nhu cầu tham chiếu đếnUIScrollView
.
Bước cuối cùng là ghi đè - (UIView *)hitTest:withEvent:
bên trong ClipView
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Về cơ bản, điều này mở rộng vùng cảm ứng của UIScrollView
khung hình của chế độ xem cha mẹ của nó, chính xác những gì bạn cần.
Một tùy chọn khác sẽ là phân lớp UIScrollView
và ghi đè - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
phương thức của nó , tuy nhiên bạn vẫn sẽ cần một khung nhìn vùng chứa để thực hiện việc cắt bớt và có thể khó xác định khi nào quay lại YES
chỉ dựa trên UIScrollView
khung của.
LƯU Ý: Bạn cũng nên xem hitTest: withEvent: sửa đổi của Juri Pakaste nếu bạn đang gặp vấn đề với tương tác người dùng subview.