2009-08-14 24 views

Trả lời

4
+0

này đã giúp, nhưng có vấn đề. Nhưng nó tốt hơn là không có gì ... – bentford

+1

Có, nếu bạn đọc trong các ý kiến ​​có một giải pháp khác. Có thực sự là một cách thứ ba để làm điều này (bên cạnh phân lớp MKMapView hoặc phân lớp của riêng bạn xem trên đầu trang và đi qua trên các chạm để MKMapView). Thay vì phân lớp MKMapView, hãy phân lớp cửa sổ chính và chuyển các sự kiện cảm ứng cho cả MKMapView và chế độ xem của bạn. http://stackoverflow.com/questions/1121889/intercepting-hijacking-iphone-touch-events-for-mkmapview/1298330 Chưa thử điều này nhưng hiệu suất rõ ràng là tốt hơn và pinch để phóng to vẫn hoạt động. – ChrisJF

+0

liên kết này không còn giá trị –

1

bạn không thể vào thời điểm này chạm đánh chặn trên xem bản đồ, bạn có thể thử layering một cái nhìn đục trên đó và xem nếu nó nhặt chạm ...

2

Hoặc tùy thuộc vào những gì bạn đang cố gắng làm, thêm MKAnnotation (ghim ghim, với chú thích), vì vậy bạn có gì đó để chạm vào - và sau đó đại biểu bản đồ của bạn sẽ nhận được một sự kiện ví dụ.

mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

30

Nếu bạn chỉ tìm cách để nhận được thông báo của cử chỉ vòi mà không ảnh hưởng bất kỳ hành vi cảm ứng khác của bản đồ, bạn sẽ muốn sử dụng một UITapGestureRecognizer. Nó siêu đơn giản, chỉ cần đặt trong một số mã như thế này.

UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] 
    initWithTarget:self action:@selector(didTapMap:)]; 
[theMKMapView addGestureRecognizer:tapRec]; 
[tapRec release]; 

Đó sẽ gọi didTapMap bất cứ khi nào theMKMapView nhận được một cử chỉ máy và tất cả các véo, và kéo cử chỉ sẽ vẫn làm việc như họ đã làm trước đó.

+0

Đối với tôi, thiết lập công cụ chọn không hoạt động nhưng hoạt động khi sử dụng chức năng đại biểu (gestureRecognizerShouldBegin :) BTW, mặc dù công việc Tap và Pan, UIPinchGestureRecognizer không hoạt động, thậm chí không sử dụng chức năng đại biểu. –

+0

Tôi không chắc chắn nên nói gì với bạn mà không có chi tiết cụ thể hơn ... Sử dụng bộ chọn luôn hoạt động cho tôi. – pseudopeach

+1

dấu hai chấm bị thiếu, ir phải là '@selector (didTapMap:)' – Ali

2

Làm việc hoàn hảo trên iOS 8

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil]; 
     doubleTap.numberOfTapsRequired = 2; 
     doubleTap.numberOfTouchesRequired = 1; 
     [self.mapView addGestureRecognizer:doubleTap]; 

     UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
     singleTap.numberOfTapsRequired = 1; 
     singleTap.numberOfTouchesRequired = 1; 
     [singleTap requireGestureRecognizerToFail: doubleTap]; 
     [self.mapView addGestureRecognizer:singleTap]; 
    } 

    - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer 
    { 
      if (gestureRecognizer.state != UIGestureRecognizerStateEnded) 
       return; 
      //Do your work ... 
    } 
0

Chỉ cần thêm một số đoạn mã như hình minh họa của @ câu trả lời tt-kilew. Trong trường hợp của tôi, tôi muốn hướng người dùng đến chính nó trên bản đồ nhưng không muốn làm gián đoạn cú chạm của mình.

@interface PrettyViewController() <MKMapViewDelegate> 

@property (weak, nonatomic) IBOutlet MKMapView *mapView; 
@property (assign, nonatomic) BOOL userTouchTheMap; 

@end 

@implementation PrettyViewController 

#pragma mark - UIResponder 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 

    self.userTouchTheMap = [[touches anyObject].view isEqual:self.mapView]; 
} 


#pragma mark - MKMapViewDelegate 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { 
    //We just positioning to user 
    if (!self.userTouchTheMap) { 
     CLLocationDistance radius = 5000; 
     [self.mapView setRegion:MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 2*radius, 2*radius) animated:YES]; 
    } 
} 

@end 
0

Không có gì mà tôi từng thấy làm việc, nhưng tôi đã đưa ra giải pháp unperfect này: Trong viewDidLoad

let singleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(onMapClicked)) 
singleTapRecognizer.delegate = self 
mapView.addGestureRecognizer(singleTapRecognizer) 

Trong đại biểu:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    return touch.view!.frame.equalTo(mapView.frame) 
} 
Các vấn đề liên quan