2012-03-02 36 views
6

Tôi đang cố xóa ba trình nhận dạng cử chỉ được đính kèm với chế độ xem trước.cách xóa hoàn toàn trình nhận dạng cử chỉ

tôi liệt kê chúng sử dụng

NSArray * activeScrollViewGRecs = [theScrollView gestureRecognizers]; 
NSLog (@"activeScrollViewGRecs count: %d",[activeScrollViewGRecs count]); 

tôi nhận được ba trong danh sách.

Sau đó, tôi loại bỏ chúng với:

for (UIGestureRecognizer *recognizer in activeScrollViewGRecs) 
{ 
    NSLog (@"recognizer: %@",recognizer.description); 
    recognizer.enabled = NO; 
    [theScrollView removeGestureRecognizer:recognizer]; 
} 

Sau đó, tôi liệt kê chúng một lần nữa, và có được một số zero. Họ nên được đi/gỡ bỏ, phải không? Tại sao sau đó chế độ xem sẽ tiếp tục phản hồi (và các phương thức cử chỉ được gọi) đến cùng một lần chạm/vuốt. Có một loại cơ chế "đỏ bừng" nào cần phải xảy ra trước khi chúng biến mất không?

đây là cách họ được tạo ra:

tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handle1:)]; 
tapGesture.cancelsTouchesInView = NO; tapGesture.delaysTouchesEnded = NO; 
tapGesture.numberOfTouchesRequired = 2; tapGesture.numberOfTapsRequired = 2;  
[self.view addGestureRecognizer:tapGesture]; [tapGesture release]; 

swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handle2:)]; 
swipeGesture.cancelsTouchesInView = NO; swipeGesture.delaysTouchesEnded = NO; swipeGesture.delegate = self; 
swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft; 
[self.view addGestureRecognizer:swipeGesture]; [swipeGesture release]; 

nhờ

+0

Bạn đã đặt điểm ngắt trên các phương pháp cử chỉ đó để xác minh xem chúng có thực sự bị sa thải ngay cả khi bạn đã xóa cử chỉ không? – Jeremy

+0

tốt, các phương pháp phản hồi chúng vẫn được gọi. tức là - (void) handleTouchesOne: (UITapGestureRecognizer *) công nhận) ... vì vậy công cụ vẫn đang xảy ra trên màn hình. – TrekOnTV2017

+0

Thú vị. Tôi đã thấy điều này xảy ra trong trường hợp một cử chỉ bị rò rỉ bằng cách nào đó. – Jeremy

Trả lời

1

Tại sao bạn không sử dụng các cử chỉ đại biểu dưới đây để ngăn chặn bất kỳ cử chỉ:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 
+0

đây là phương pháp tôi xóa chúng. Bây giờ tôi nghĩ rằng đó có thể là vấn đề. Loại bỏ chúng ở giữa một phương thức đại biểu. – TrekOnTV2017

+0

Tại sao bạn cần xóa nó? Bạn không thể trả lại NO trong hàm này? – cocoakomali

+0

Tôi đoán là tôi phải làm vậy, vì tôi không thể loại bỏ chúng đúng cách. – TrekOnTV2017

0

Trông với tôi như bạn đang thêm công cụ nhận dạng cử chỉ vào chế độ xem nhưng xóa chúng khỏiScrollView. Đây có phải là những gì bạn dự định không? Bạn nên xóa các trình nhận dạng cử chỉ khỏi self.view nếu bạn muốn những người đó dừng lại.

+0

Xin chào. Tôi đang xóa chúng khỏi cùng một chế độ xem mà chúng được đính kèm. Tôi xác nhận điều này bằng cách kiểm tra mảng gestureRecognizers trước và sau khi xóa. Đó là 3 trước và sau 0. – TrekOnTV2017

+0

Scrollviews luôn có bộ nhận dạng cử chỉ, nhưng chế độ xem bạn đang thêm vào dường như không phải là chế độ bạn đang xóa, theo mã bạn đã đăng. Hãy thử làm nó để self.view thay vì theScrollView và xem nếu đó sửa chữa vấn đề của bạn. –

0

Chấp nhận giao thức UIGestureRecognizerDelegate và triển khai phương pháp sau.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (to completely remove gesture recognizers) 
     return NO; 
    else 
     return YES; 
} 
Các vấn đề liên quan