2012-09-20 25 views
6

trong ios 5 i đã có thể vô hiệu hóa thao tác nhấn đúp bằng cách chỉ ghi đè bằng cử chỉ nhấn đúp mới. Nhưng có vẻ như cử chỉ nhấn đúp không còn trong mảng gesturerecognizer đi kèm với mkmapview.Vô hiệu hóa thao tác nhấn đúp vào MKMapView (iOS 6)

NSArray *gestureRecognizers = [_mapView gestureRecognizers]; 
for (UIGestureRecognizer *recognizer in gestureRecognizers) { 
    NSLog(@"%@", recognizer); 
} 

trả về không có gì trong ios 6, trong đó trong 5 nó sẽ trả về 2 trình nhận dạng, một cho một lần nhấn và một lần để nhấn đúp.

Trả lời

7

Tôi sẽ xem qua trình nhận dạng cử chỉ của các bản xem phụ của MKMapView. Nó có lẽ vẫn còn ở đâu đó.

Tất nhiên, rối tung xung quanh với của cái nhìn khác GRS là hơi mơ hồ và có thể sẽ phá vỡ thời gian tiếp theo của Apple thay đổi điều gì đó về MKMapView ...

EDIT: Để tiện lợi hơn bất cứ ai khác đọc bài viết này, xin vui lòng kiểm tra xem đó là UITapGestureRecognizernumberOfTapsRequired == 2numberOfTouchesRequired == 1.

Ngoài ra, thay vì vô hiệu hóa nhấn đúp trên bản đồ hoàn toàn, hãy xem xét thêm nhấn đúp vào GR trên chú thích và sau đó thực hiện [mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]. Một lần nữa, hack — không đổ lỗi cho tôi nếu nó phá vỡ trên bản cập nhật hệ điều hành tiếp theo!

+0

Bạn đã đúng! Cảm ơn. – Ludvig

+0

@Ludvig: Xem thêm đoạn thứ hai của bản chỉnh sửa của tôi :) –

+0

Điều này phù hợp với tôi. iOS 9. – aparesidam

2

Bạn có muốn cho phép người dùng làm bất kỳ điều gì với chế độ xem không? Nếu không, đủ để đặt userInteractionEnabled thành NO. Nếu có, bạn cần cho phép những tương tác cụ thể nào? Tất cả mọi thứ nhưng nhấn đúp? Tại sao vô hiệu hóa một tương tác đó?

Càng biết nhiều hơn về trường hợp sử dụng của bạn, câu trả lời chúng tôi có thể cung cấp càng tốt.

+0

Tôi muốn người dùng có thể nhấn, không nhấn đúp. Trong ứng dụng của tôi, người dùng đôi khi phải nhấn vào nhiều lần trên một chú thích, vì vậy tôi không muốn ứng dụng thu phóng. Cảm ơn bạn đã giúp đỡ – Ludvig

0

Thay vào đó, bạn có thể sử dụng thao tác nhấn dài để hoạt động.

2

Điều này làm việc cho tôi: [_mapView.subviews [0] addGestureRecognizer: MyDoubleTapOverrider];

+0

điều này rất dễ sử dụng và phù hợp với tôi. – junaidsidhu

1

này làm việc cho tôi:

//INIT the MKMapView  
    -(id) init{ 
     ... 
     [self getGesturesRecursive:mapView]; 
     ... 
    } 

Và sau đó cho phép vòng lặp chức năng đệ quy qua subviews và tìm GR: s.

-(void)getGesturesRecursive:(UIView*)v{ 
     NSArray *gestureRecognizers = [v gestureRecognizers]; 
     for (UIGestureRecognizer *recognizer in gestureRecognizers) { 
      if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) {     
       [v removeGestureRecognizer:recognizer]; 
      } 
     } 

     for (UIView *v1 in v.subviews){ 
      [self getGesturesRecursive:v1]; 
     } 
    } 

Ví dụ này loại bỏ tất cả tap-GR: s. Nhưng tôi đoán bạn có thể chỉ định để loại bỏ bất cứ điều gì bạn muốn.

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