MKMapView
के उदाहरण पर मैं एक टैप का पता कैसे लगा सकता हूं? क्या मुझे MKMapView
उप-वर्ग करना है और फिर touchesEnded
विधि को ओवरराइड करना है?आईफोन: एमकेमैप व्यू में टैप का पता लगाने
धन्यवाद,
-क्रिस
MKMapView
के उदाहरण पर मैं एक टैप का पता कैसे लगा सकता हूं? क्या मुझे MKMapView
उप-वर्ग करना है और फिर touchesEnded
विधि को ओवरराइड करना है?आईफोन: एमकेमैप व्यू में टैप का पता लगाने
धन्यवाद,
-क्रिस
आशा इस में मदद मिलेगी: How to intercept touches events on a MKMapView or UIWebView objects?
आप एक नक्शा दृश्य पर इस बार अवरोधन छूता है पर नहीं कर सकते, तो आप वहां पर एक अपारदर्शी दृश्य लेयरिंग कोशिश करते हैं और देखते हैं अगर यह छूता है ऊपर उठाता है सकते हैं ...
या जो आप करने का प्रयास कर रहे हैं उसके आधार पर, MKAnnotation
(कॉलआउट के साथ पुश पिन) जोड़ें, इसलिए आपके पास टैप करने के लिए कुछ है - और फिर आपके मानचित्र प्रतिनिधि को एक ईवेंट प्राप्त होगा।
mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
तुम सिर्फ नक्शे के अन्य टच व्यवहार से किसी को प्रभावित किए बिना नल इशारों की सूचना पाने के लिए देख रहे हैं, तो आप एक का उपयोग करना चाहेंगे UITapGestureRecognizer
। यह बहुत आसान है, बस इस तरह के कुछ कोड में डाल दिया।
UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];
कि didTapMap
जब भी theMKMapView
एक नल इशारा प्राप्त करता है और सभी बन्द रखो, और खींचने इशारों अभी भी काम करेगा के रूप में वे पहले किया था कॉल करेंगे।
मेरे लिए, एक चयनकर्ता सेट करना काम नहीं करता है, लेकिन प्रतिनिधि कार्यों का उपयोग करते समय काम करता है (इशारा रिकॉग्नाइज़रशोल्डबिन :) बीटीडब्ल्यू, हालांकि टैप और पैन काम, यूआईपीआईएनजीजेस्टर रिकॉग्नाइज़र काम नहीं करता है, प्रतिनिधि कार्यों का भी उपयोग नहीं करता है। –
मुझे यकीन नहीं है कि इससे आपको और अधिक विशिष्टताओं के बिना क्या बताना है ... चयनकर्ता का उपयोग करना हमेशा मेरे लिए काम करता है। – pseudopeach
एक कोलन गुम है, आईआर होना चाहिए @ @ चयनकर्ता (didTapMap:) ' – Ali
आईओएस 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 ...
}
पर पूरी तरह से काम कर रहे बस @ टीटी-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
कुछ भी नहीं है मैं कभी भी काम मिल गया, लेकिन मैं इस 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)
}
इस मदद की, लेकिन मुद्दे हैं। लेकिन यह कुछ भी नहीं है ... – bentford
हां, अगर आप टिप्पणियों में पढ़ते हैं तो एक और समाधान होता है। वास्तव में ऐसा करने का एक तीसरा तरीका है (उप-वर्गीकरण MKMapView के अलावा या शीर्ष पर अपना स्वयं का दृश्य रखना और MKMapView पर स्पर्श पर गुजरना)। MKMapView को उप-वर्गीकृत करने के बजाय, मुख्य विंडो को उप-वर्ग करें और स्पर्श ईवेंट को MKMapView और अपने दृश्य दोनों में पास करें। http://stackoverflow.com/questions/1121889/intercepting-hijacking-iphone-touch-events-for-mkmapview/1298330 अभी तक यह कोशिश नहीं की है लेकिन स्पष्ट रूप से प्रदर्शन बेहतर है और अभी भी ज़ूम करने के लिए चुटकी है। – ChrisJF
यह लिंक अब मान्य नहीं है –