2011-12-06 41 views
10

Làm cách nào để biết khi nào ngón tay bị tắt và khi nào ngón tay lên với UITapGestureRecognizer?
documentation nói rằng tôi chỉ nên xử lý UIGestureRecognizerStateEnded khi nhấn để có nghĩa là có UIGestureRecognizerStateBegin khi ngón tay bị tắt, nhưng tất cả những gì tôi nhận được là UIGestureRecognizerStateEnded.
Mã tôi sử dụng để đăng ký nhận dạng là:phát hiện ngón tay lên/xuống UITapGestureRecognizer

[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)] 
+0

Nếu bạn có cùng một vấn đề kiểm tra liên kết này, đó là một vẻ đẹp: [guides.codepath.com] (https://guides.codepath.com/ios/Using-Gesture-Recognizers#programmatically-add -and-configure-a-gesture-recognizer) – MoVod

Trả lời

18

UITapGestureRecognizer là một cử chỉ nhận dạng rời rạc, và do đó không bao giờ chuyển tiếp đến các tiểu bang bắt đầu hoặc thay đổi. Từ UIGestureRecognizer Lớp tham khảo:

cử chỉ rời rạc chuyển đổi từ Có thể một trong hai công nhận (UIGestureRecognizerStateRecognized) hoặc Không (UIGestureRecognizerStateFailed), tùy thuộc vào việc họ giải thích thành công cử chỉ hay không. Nếu trình nhận dạng cử chỉ chuyển đổi thành Được nhận dạng, nó sẽ gửi thông điệp hành động đến mục tiêu của nó.

(Nhớ tất nhiên là UIGestureRecognizerStateRecognized == UIGestureRecognizerStateEnded).

Tài liệu đang nói rằng bạn nên kiểm tra trạng thái của trình nhận dạng cử chỉ nhấn để xem trạng thái của trạng thái đã kết thúc, trước khi bạn kích hoạt mã của mình để nói rằng mã đã được nhận dạng. Họ không nói rằng cử chỉ chạm thực sự chuyển sang trạng thái bắt đầu hoặc thay đổi (mặc dù tôi thừa nhận rằng các tài liệu hơi gây hiểu lầm trong ngôn ngữ được sử dụng!).

Nếu bạn muốn kiểm tra sự kiện tắt ngón tay cho trình nhận dạng cử chỉ nhấn, tôi khuyên bạn chỉ nên sử dụng touchesBegan:withEvent:, vì đây thực sự là những gì bạn thực sự đang thực hiện.

1

Bạn có thể ghi đè phương thức ủy nhiệm -(BOOL)gestureRecognizer:shouldReceiveTouch:.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    NSLog(@"Hello from press down"); 

    return YES; 
} 
Các vấn đề liên quan