2010-06-20 39 views
8

Trong ứng dụng của tôi, tôi đã thêm Trình nhận dạng cử chỉ mới có sẵn trong SDK 3.2. Mọi thứ dường như hoạt động chính xác và thời gian phản hồi trên màn hình rất nhanh. Nhưng vì một lý do nào đó khi tôi thêm requireGestureRecognizerToFail vào một số cử chỉ của tôi, có một sự chậm trễ rất rõ ràng khi cử chỉ được kích hoạt. Dưới đây là một đoạn mã mà tôi sử dụng để tạo Trình nhận dạng cử chỉ. Có ai biết tại sao có một sự chậm trễ và làm thế nào tôi có thể sửa chữa nó? Tôi đang sử dụng requireGestureRecognizerToFail để ngăn cử chỉ SingleTap kích hoạt khi người dùng thực hiện DoubleTap.Nhận dạng cử chỉ trên iPad - Trả lời chậm

- (void)createGestureRecognizers { 

//Single Finger Double-Tap 
UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handleSingleDoubleTap:)]; 
    singleFingerDTap.numberOfTapsRequired = 2; 
    [super addGestureRecognizer:singleFingerDTap]; 

//Single Finger Tap 
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] 
       initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleFingerTap.numberOfTapsRequired = 1; 
[singleFingerTap requireGestureRecognizerToFail:singleFingerDTap]; 
[self addGestureRecognizer:singleFingerTap]; 

//Two Finger Pan 
UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handlePanGesture2:)]; 
    panGesture2.maximumNumberOfTouches = 2; 
[super addGestureRecognizer:panGesture2]; 

//Single Finger Pan 
UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handlePanGesture1:)]; 
    panGesture1.maximumNumberOfTouches = 1; 
[panGesture1 requireGestureRecognizerToFail:panGesture2]; 
[super addGestureRecognizer:panGesture1]; 

[singleFingerDTap release]; 
[singleFingerTap release]; 
    [panGesture1 release]; 
[panGesture2 release]; 
} 
+0

Hành vi đó không phải là mong đợi? Nếu bạn yêu cầu nó trì hoãn hành động của nó cho đến khi một cử chỉ khác không thành công, thì nó không thể kích hoạt cho đến khi nó kết thúc. Và hai vòi có một khoảng thời gian giữa chúng (vòi! = Chạm), vì vậy bạn cần khoảng thời gian này để vượt qua. – Eiko

+0

Cảm ơn, điều đó có ý nghĩa hoàn hảo! – Maddoxx

Trả lời

6

Nếu bạn muốn phân biệt giữa một lần và nhấn đúp, bạn phải đợi đủ lâu để biết rằng không có lần nhấn thứ hai nào đến trước khi bạn có thể gọi nó bằng một lần nhấn. Phương án thay thế sẽ là thiết kế tất cả các thao tác nhấn đơn của bạn theo cách sao cho chúng có thể bị hủy hoặc hủy không đồng bộ khi phát hiện thấy nhấn đúp. Ví dụ: nếu bạn có một trang thay đổi nhấn đơn và thu phóng nhấn đúp, thì bạn sẽ phải tạo hiệu ứng trang thay đổi trên một lần nhấn, sau đó đảo ngược hoạt ảnh và thu phóng thay vì phát hiện thấy lần nhấn thứ hai. Đến lúc đó, chế độ xem xử lý một lần chạm có thể đã di chuyển. Trong hầu hết các trường hợp, đó là rắc rối và rắc rối nhiều hơn thì nó là giá trị.

+1

Bây giờ tôi nghĩ về những gì bạn nói, nó có ý nghĩa hoàn hảo rằng có sự chậm trễ. Vì tôi cần một phản ứng thời gian thực hơn, tôi sẽ phải quay trở lại để xử lý các sự kiện Touch một mình. Cảm ơn! – Maddoxx

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