iPhone: MKMapView में नल का पता लगा रहा

वोट
19

मैं कैसे का एक उदाहरण पर एक टैप पता नहीं लगा पाते MKMapView? मैं उपवर्ग करना होगा MKMapViewऔर उसके बाद ओवरराइड touchesEndedविधि?

धन्यवाद,

-क्रिस

14/08/2009 को 03:22
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


8 जवाब

वोट
31

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

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

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

31/12/2010 को 21:30
का स्रोत उपयोगकर्ता

10/11/2009 को 13:27
का स्रोत उपयोगकर्ता

वोट
2

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 ...
     }
03/04/2015 को 10:46
का स्रोत उपयोगकर्ता

वोट
2

या फिर आप क्या करने की कोशिश कर रहे हैं पर निर्भर करता है, एक को जोड़ने MKAnnotation(पुश पिन, एक कॉल आउट के साथ) है, तो आप पर दोहन करने के लिए कुछ है - और फिर अपने नक्शे प्रतिनिधि एक घटना जैसे प्राप्त होगा।

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

18/09/2009 को 09:31
का स्रोत उपयोगकर्ता

वोट
0

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()
        }
    }
}

यह काम करता हैं। लेकिन ईमानदारी से करता है, तो सेब विचारों की परतों में परिवर्तन तोड़ सकते हैं। एक पहचानकर्ता बेहतर।

16/09/2019 को 19:19
का स्रोत उपयोगकर्ता

वोट
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)
}
20/09/2017 को 09:34
का स्रोत उपयोगकर्ता

वोट
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
07/04/2017 को 13:59
का स्रोत उपयोगकर्ता

वोट
0

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

14/08/2009 को 03:59
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more