2009-08-14 11 views

उत्तर

4

आशा इस में मदद मिलेगी: How to intercept touches events on a MKMapView or UIWebView objects?

+0

इस मदद की, लेकिन मुद्दे हैं। लेकिन यह कुछ भी नहीं है ... – bentford

+1

हां, अगर आप टिप्पणियों में पढ़ते हैं तो एक और समाधान होता है। वास्तव में ऐसा करने का एक तीसरा तरीका है (उप-वर्गीकरण MKMapView के अलावा या शीर्ष पर अपना स्वयं का दृश्य रखना और MKMapView पर स्पर्श पर गुजरना)। MKMapView को उप-वर्गीकृत करने के बजाय, मुख्य विंडो को उप-वर्ग करें और स्पर्श ईवेंट को MKMapView और अपने दृश्य दोनों में पास करें। http://stackoverflow.com/questions/1121889/intercepting-hijacking-iphone-touch-events-for-mkmapview/1298330 अभी तक यह कोशिश नहीं की है लेकिन स्पष्ट रूप से प्रदर्शन बेहतर है और अभी भी ज़ूम करने के लिए चुटकी है। – ChrisJF

+0

यह लिंक अब मान्य नहीं है –

1

आप एक नक्शा दृश्य पर इस बार अवरोधन छूता है पर नहीं कर सकते, तो आप वहां पर एक अपारदर्शी दृश्य लेयरिंग कोशिश करते हैं और देखते हैं अगर यह छूता है ऊपर उठाता है सकते हैं ...

2

या जो आप करने का प्रयास कर रहे हैं उसके आधार पर, MKAnnotation (कॉलआउट के साथ पुश पिन) जोड़ें, इसलिए आपके पास टैप करने के लिए कुछ है - और फिर आपके मानचित्र प्रतिनिधि को एक ईवेंट प्राप्त होगा।

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

30

तुम सिर्फ नक्शे के अन्य टच व्यवहार से किसी को प्रभावित किए बिना नल इशारों की सूचना पाने के लिए देख रहे हैं, तो आप एक का उपयोग करना चाहेंगे UITapGestureRecognizer। यह बहुत आसान है, बस इस तरह के कुछ कोड में डाल दिया।

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

कि didTapMap जब भी theMKMapView एक नल इशारा प्राप्त करता है और सभी बन्द रखो, और खींचने इशारों अभी भी काम करेगा के रूप में वे पहले किया था कॉल करेंगे।

+0

मेरे लिए, एक चयनकर्ता सेट करना काम नहीं करता है, लेकिन प्रतिनिधि कार्यों का उपयोग करते समय काम करता है (इशारा रिकॉग्नाइज़रशोल्डबिन :) बीटीडब्ल्यू, हालांकि टैप और पैन काम, यूआईपीआईएनजीजेस्टर रिकॉग्नाइज़र काम नहीं करता है, प्रतिनिधि कार्यों का भी उपयोग नहीं करता है। –

+0

मुझे यकीन नहीं है कि इससे आपको और अधिक विशिष्टताओं के बिना क्या बताना है ... चयनकर्ता का उपयोग करना हमेशा मेरे लिए काम करता है। – pseudopeach

+1

एक कोलन गुम है, आईआर होना चाहिए @ @ चयनकर्ता (didTapMap:) ' – Ali

2

आईओएस 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

पर पूरी तरह से काम कर रहे बस @ टीटी-kilew जवाब का चित्रण के रूप में कुछ कोड स्निपेट जोड़ें। मेरे मामले में, मैं उपयोगकर्ता को मानचित्र पर खुद को इंगित करना चाहता हूं लेकिन अपने ड्रैग स्पर्श को बाधित नहीं करना चाहता हूं।

@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

कुछ भी नहीं है मैं कभी भी काम मिल गया, लेकिन मैं इस unperfect समाधान के साथ आया था: viewDidLoad

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

प्रतिनिधि में:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    return touch.view!.frame.equalTo(mapView.frame) 
} 
संबंधित मुद्दे