2013-04-08 36 views
5

Từ đọc số UIGestureRecognizer Class Reference, hàm API sẽ xử lý ưu tiên chạm và điều khiển cử chỉ cho bạn, đảm bảo rằng touchesBegan và các phương pháp liên quan không được gọi trên chế độ xem trừ khi các công cụ nhận dạng cử chỉ đã thất bại trước tiên:Cách ưu tiên nhận dạng cử chỉ và chạm vào UIView

Cửa sổ cung cấp các sự kiện cảm ứng cho trình nhận dạng cử chỉ trước khi đưa chúng đến chế độ xem thử nghiệm được gắn với trình nhận dạng cử chỉ. Nói chung, nếu trình nhận dạng cử chỉ phân tích luồng chạm trong chuỗi đa chạm và không nhận ra cử chỉ của nó, thì khung nhìn sẽ nhận được đầy đủ các chạm. Nếu trình nhận dạng cử chỉ nhận ra cử chỉ của nó, các lần chạm còn lại cho chế độ xem sẽ bị hủy.

Tôi đã thêm cử chỉ vuốt vào chế độ xem của mình và thao tác này đang hoạt động. Qua một số lần đăng nhập, khi tôi vuốt một lần, phương thức báo cáo như vậy. Tuy nhiên, phương pháp touchesBegan của tôi là cũng báo cáo qua nhật ký của nó, mặc dù phương thức touchesCancelled, như mong đợi, cũng nhận được thông báo.

Tôi muốn và mong đợi, cử chỉ nhận ra để ngăn không cho touchesBegan hoặc touchesMoved không được gọi.

Vì vậy, câu hỏi của tôi là: đối với trình nhận dạng cử chỉ trong thực tế, các lần chạm chậm trên cơ sở trạng thái của nó, có cần phải thiết lập bổ sung không? Các tài liệu không đề xuất bất cứ điều gì khác khi cần thiết.

Thiết lập của tôi chỉ đơn giản là:

swipeUpTwoFinger=[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doubleSwipeUp:)]autorelease]; 
swipeUpTwoFinger.direction=UISwipeGestureRecognizerDirectionUp; 
swipeUpTwoFinger.numberOfTouchesRequired=2; 
[self addGestureRecognizer:swipeUpTwoFinger]; 

Tôi cũng đã cố gắng thử nghiệm này để đảm bảo một recognizer đã thất bại trước khi chế biến với touchesBegan (xét nghiệm này nên không là cần thiết nếu bạn tin vào những gì các tài liệu nói trên) nhưng touchesBegan vẫn xử lý dòng nhật ký sau khi thử nghiệm này:

if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)

Trả lời

7

có vẻ như bạn cần: swipeUpTwoFinger.delaysTouchesBegan = YES;

+0

thực sự tôi vừa phát hiện ra rằng nó không được kích hoạt theo mặc định. Cảm ơn. – johnbakers

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