2012-03-20 31 views
7

Tôi đang tạo UIView tùy chỉnh và thêm UITapGestureRecognizer vào đó. Tôi có một người xử lý cho cử chỉ chạm. Nhưng đồng thời tôi muốn UIView của tôi để nghe touchesBegan & touchesCác phương pháp được sử dụng. Tôi đã thực hiện gestureRecognizer: shouldReceiveTouch: phương pháp cũng nhưng touchesBegan/touchesCác phương thức không được gọi. Bất kỳ đầu mối tại sao?Nghe sự kiện UITouch cùng với UIGestureRecognizer

Bên trong tùy chỉnh của tôi UIView

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch { 
    return YES; 
} 

Bên trong điều khiển điểm của tôi

MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease]; 
       UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[aCustomView addGestureRecognizer:myGestureRecognizer]; 
       [myGestureRecognizer release]; 
+0

Tôi luôn luôn nghĩ rằng touchesBegan chỉ áp dụng cho quan điểm của chủ viewController của. – CodaFi

Trả lời

10

Bạn cần phải thiết lập cancelsTouchesInView (và có khả năng delaysTouchesBegandelaysTouchesEnded) để NO cho nhận dạng cử chỉ. Hành vi mặc định của trình nhận dạng cử chỉ là để tránh có cả ứng dụng này và quá trình xem sẽ liên lạc. Các cài đặt này cho phép bạn tinh chỉnh hành vi đó.

+0

Tôi chắc chắn rằng tôi đã nhận được hành vi mà bạn đề cập đến. Tôi đang sử dụng các cài đặt mặc định, nhưng phương pháp chạm của tôi vẫn được gọi. Xem câu hỏi của tôi ở đây: http://stackoverflow.com/questions/15869944/how-to-prioritize-gesture-recognizers-and-touches-in-a-uiview – johnbakers

+0

@RobNapier sẽ không đặt cancelsTouchesInView được liên kết với vấn đề của tôi ở đây : https://stackoverflow.com/questions/46170876/random-crash-on-pickerview-didselect-cfrunloop-is-calling-out-to-a-source1-p?noredirect=1#comment79305779_46170876 – user2363025

0

Như đã nêu trước đó, bạn cần đặt thuộc tính cancelTouchesInView thành NO trên số UITapGestureRecognizer của mình.

Từ Apple Documents:

cancelsTouchesInView-Nếu một trình nhận dạng cử chỉ nhận ra cử chỉ của nó, nó unbinds chạm còn lại của cử chỉ mà từ quan điểm của họ (vì vậy cửa sổ sẽ không cung cấp cho họ). Cửa sổ hủy bỏ các chạm trước đó với một thông báo (touchesCancelled: withEvent :). Nếu trình nhận dạng cử chỉ không nhận ra cử chỉ của nó, chế độ xem sẽ nhận được tất cả các lần chạm trong chuỗi đa chạm.

Tiếp tục đọc: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/

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