A UIScrollViewcó 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ố UIScrollViewcủa chiều rộng.
Sau đó, vì bạn muốn xem các trang khác, tất nhiên, hãy đặt clipsToBoundsthành NOnhư 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 UIScrollViewkhung 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 UIViewlớp con (tức là ClipView) sẽ chứa các lượt xem con UIScrollViewvà của nó. Về cơ bản, nó phải có khung của những gì bạn cho là UIScrollViewsẽ 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 YESnếu chiều rộng của nó nhỏ hơn chiều rộng của chế độ xem gốc. Ngoài ra, ClipViewnhu 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 UIScrollViewvà ghi đè - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventphươ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 YESchỉ dựa trên UIScrollViewkhung 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.