2013-01-05 28 views
7

Tôi có UIScrollView dưới UIView trong suốt. Tôi cần phải chuyển tất cả các chảo và vòi đến chế độ xem cuộn (chỉ cuộn theo chiều ngang). UIView thường xuyên sử dụng một lớp con của UIPanGestureRecognizer để theo dõi các ô dọc (Subclass found here). Trong chế độ xem lớp phủ, tôi ghi đè các phương thức sự kiện chạm để chuyển chúng tới UIScrollView.Chuyển thông tin liên lạc tới UIScrollView dưới một UIView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesBegan:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesBegan:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesBegan:touches withEvent:event]; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesCancelled:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesCancelled:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesCancelled:touches withEvent:event]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesEnded:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesEnded:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesEnded:touches withEvent:event]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesMoved:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesMoved:touches withEvent:event]; 
} 

Chế độ xem lớp phủ, khay dọc hoạt động hoàn hảo. Trong UIScrollView, các vòi cũng hoạt động hoàn hảo. Di chuyển mặc dù, không quá nhiều. Cuộn xem cuộn khoảng ba điểm, sau đó dừng lại (khi tôi tiếp tục với pan ngang.) Nếu tôi cho đi với một vận tốc, xem cuộn sau đó chọn vận tốc đó và kết thúc cuộn.

Điều gì sẽ là vấn đề có thể khiến cho chế độ xem cuộn để dừng cuộn sau đó nhận vận tốc?

Trả lời

2

Từ mã bạn đã đăng, tôi giả sử bạn không làm gì với UIView trong suốt .. thì tại sao bạn không đặt userInteractionEnabled = NO; ??

+0

Giả sử chế độ xem trong suốt cần phản hồi ít nhất một loại liên lạc, chẳng hạn như vuốt hoặc bất kỳ thứ gì. –

+0

Uhmm ... Tôi không biết tại sao di chuyển của bạn dừng lại và nhận vận tốc .. nhưng những gì tôi đã làm là .. Có UIScrollView của tôi xử lý tất cả các sự kiện .. bao gồm cả swipe UIView minh bạch phải xử lý ... và thực hiện một chức năng gọi lại mà vượt qua sự kiện đó để UIView ... cũng vô hiệu hóa userInteractionEnabled trên UIView .. vì vậy UIScrollView hoạt động theo cách nó phải .. nd UIView sẽ xử lý sự kiện duy nhất nó phải vì UIScrollView sẽ bắt nó và vượt qua nó cho UIView ... có thể đã quá muộn để bạn quay lại và thay đổi nó .. nhưng xin lỗi tôi không biết cách khắc phục vấn đề của bạn. – chuthan20

0

Dưới đây là một giải pháp dễ dàng hơn mà làm việc tốt cho tôi:

Trong UIView trong suốt (chúng ta hãy gọi nó OverlayView) làm cho chiều rộng và chiều cao cả 0 (do đó quan điểm không còn về mặt kỹ thuật trên đầu trang của UIScrollView) và đặt clipsToBounds = NO (để nội dung của OverlayView vẫn hiển thị trên đầu UIScrollView).

self.OverlayView.clipsToBounds = NO; 
CGRect frame = self.OverlayView.frame; 
self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0); 

Lưu ý rằng nếu Lớp phủ có chứa điều khiển tương tác (như nút ở trên) thì chúng sẽ không còn hoạt động nữa. Bạn sẽ cần di chuyển nó vào chế độ xem riêng của nó phía trên UIScrollView.

0
#import "CustomUiView.h" 

@implementation CustomUiView.h 

-(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event{ 
    return NO; 
} 
@end 

Chế độ xem bạn không muốn tương tác. tạo lớp UIView tùy chỉnh và sử dụng chế độ xem tùy chỉnh này làm chế độ xem trên cùng của bạn trả về KHÔNG trong phương thức pointInside. Sau đó, các liên lạc sẽ đi tự động underearth. Trong trường hợp của bạn UIView trong suốt của bạn sẽ là lớp con CustomUiView của UIView.

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