2010-09-17 41 views
10

Xem ứng dụng Cửa hàng ứng dụng, trên iPhone hoặc iPad, cụ thể là phần trên màn hình chi tiết ứng dụng hiển thị ảnh chụp màn hình. Trình xem ảnh chụp màn hình hiển thị cho bạn ảnh chụp màn hình bạn đang xem và các cạnh của ảnh chụp màn hình tiếp theo và trước đó. Tôi cần phải thực hiện một cái gì đó giống như thế.Phân trang UIScrollView với các trang lân cận nhìn trộm

Cách tôi đã thực hiện công bằng với người nghèo: Tôi đã xây dựng UIScrollView và phân trang được bật và đặt nội dung của tôi. Tôi đã tạo khung có cùng kích thước với trang nội dung nhưng nhỏ hơn màn hình. Sau đó, tôi vô hiệu hóa clipToBounds, vì vậy bất cứ điều gì bên ngoài khung của ScrollView vẫn được vẽ. Bây giờ tôi có thể nhìn thấy các cạnh của các trang liền kề, nhưng chúng ở bên ngoài ScrollView và do đó không thể nhận được các chạm di chuyển. Ứng dụng App Store cho phép bạn chạm vào toàn bộ chiều rộng của vật đó, bao gồm cả các cạnh nhìn trộm của các trang lân cận.

Vậy họ làm như thế nào?

Trả lời

17

Bạn cần thêm chế độ xem 'đằng sau' chế độ xem cuộn bao phủ toàn bộ khu vực nơi các trang của bạn sẽ hiển thị. Chế độ xem này sẽ triển khai -hitTest: withEvent :. Phương thức này sẽ được hệ điều hành gọi để xác định nơi định tuyến sự kiện chạm cụ thể. Tất cả bạn cần làm là quay trở lại xem di chuyển của bạn cho bất kỳ điểm trong quan điểm ủng hộ này:

- (UIView *) hitTest: (CGPoint) pt withEvent: (UIEvent *) event { 
    if (CGRectContainsPoint(self.bounds, pt)) return self.scrollView; 
    return [super hitTest: pt withEvent: event]; 
} 
+0

Tôi không thể tin nó đơn giản như vậy! Nó sẽ là một hoặc hai ngày trước khi tôi có thể thử nó ra (kế hoạch nghèo trên phần của khách hàng của tôi DOES trong thực tế tạo thành một trường hợp khẩn cấp trên một phần của tôi, nó quay ra), nhưng tôi sẽ tạm thời cung cấp cho bạn kiểm tra anyway. Chúc mừng! –

+0

Cảm ơn rất nhiều vì câu trả lời này, Ben! Điều này thực sự làm việc tuyệt vời. –

+3

Tôi đã thử các giải pháp trên quá nhưng thấy rằng các mục mình trong chế độ xem cuộn không còn nhận được sự kiện cảm ứng - chỉ scrollview hiện. Đây có phải là hành vi mong đợi không? –

0

Đừng quên để chuyển tiếp các chạm đến subviews scrollview nếu bạn muốn nội dung của bạn ở lại tương tác bên ngoài giới hạn.

Ví dụ sau là đúng nếu bạn đã đặt nội dung cuộn trong một vùng chứa bổ sung. Nếu đây không phải là trường hợp, vòng lặp trên các bản xem trước và trả lại bản xem được chạm bởi lần chạm của bạn.

- (UIView*)hitTest:(CGPoint)pt withEvent:(UIEvent*)event 
{ 
    UIView *contentView = [self.subviews count] ? [self.subviews objectAtIndex:0] : nil; 
    return [contentView hitTest:pt withEvent:event]; 
} 
+1

Tôi đã thử điều này nhưng phương pháp hittest của UIScrollView không bao giờ được gọi. Bạn đang thực hiện phân cấp chế độ xem của mình như thế nào? – htafoya

1

Tôi không có một đủ cao cấp nhận xét về câu trả lời ở trên nhưng bạn có thể tìm thấy một hướng dẫn và mẫu mã trên trang web Ray Wenderlich của: How To Use UIScrollView to Scroll and Zoom Content

Mã này sử dụng các kỹ thuật được liệt kê ở trên, cụ thể là logic thử nghiệm hit.

Các vấn đề liên quan