मैं कैसे का एक उदाहरण पर एक टैप पता नहीं लगा पाते MKMapView? मैं उपवर्ग करना होगा MKMapViewऔर उसके बाद ओवरराइड touchesEndedविधि?
धन्यवाद,
-क्रिस
मैं कैसे का एक उदाहरण पर एक टैप पता नहीं लगा पाते MKMapView? मैं उपवर्ग करना होगा MKMapViewऔर उसके बाद ओवरराइड touchesEndedविधि?
धन्यवाद,
-क्रिस
तुम सिर्फ नक्शे के अन्य टच व्यवहार से किसी को प्रभावित किए बिना नल इशारों की सूचना पाने के लिए देख रहे हैं, तो आप एक का उपयोग करना चाहेंगे UITapGestureRecognizer। यह सुपर सरल है, बस इस तरह की कुछ कोड में रखा है।
UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];
यही कारण है कि कॉल करेंगे didTapMapजब भी theMKMapViewएक टैप जेस्चर और सभी बन्द रखो प्राप्त करता है, और खींचने इशारों अभी भी काम करेगा के रूप में वे पहले किया था।
इस में मदद मिलेगी उम्मीद: कैसे एक MKMapView या UIWebView वस्तुओं पर छूता घटनाओं को बीच में रोकने के लिए?
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 ...
}
या फिर आप क्या करने की कोशिश कर रहे हैं पर निर्भर करता है, एक को जोड़ने MKAnnotation(पुश पिन, एक कॉल आउट के साथ) है, तो आप पर दोहन करने के लिए कुछ है - और फिर अपने नक्शे प्रतिनिधि एक घटना जैसे प्राप्त होगा।
mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
swit 5.x के लिए मेरे 2 सेंट:
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let v = touch.view
let ssv = v?.superview?.superview
if ssv === self.mapView{
searchBar.resignFirstResponder()
}
}
}
यह काम करता हैं। लेकिन ईमानदारी से करता है, तो सेब विचारों की परतों में परिवर्तन तोड़ सकते हैं। एक पहचानकर्ता बेहतर।
कुछ भी नहीं है मैं कभी भी काम मिल गया, लेकिन मैं इस 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)
}
बस @ टीटी-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
तुम नहीं कर सकते इस समय अवरोधन एक नक्शा दृश्य पर छू लेती है पर, तुम वहाँ पर एक अपारदर्शी दृश्य लेयरिंग कोशिश करते हैं और देखते हैं अगर यह छूता है ऊपर उठाता है सकते हैं ...