2011-06-22 14 views
9

ऐप में मैं वर्तमान में डिज़ाइन कर रहा हूं कि मेरे पास MKMapView पर ओवरले हैं (अनुकूलित MKPolylines बीटीडब्ल्यू) और मैं इन ओवरले पर स्पर्श ईवेंट का पता लगाने और प्रत्येक को एक विशिष्ट क्रिया निर्दिष्ट करने में सक्षम होना चाहता हूं ओवरले। क्या कोई इस पर मेरी मदद कर सकता है? धन्यवाद!MKMapView के ओवरले पर टच इवेंट

Benja

उत्तर

0

बस के मामले में यह आप में से कुछ मदद कर सकता है ... मुझे लगता है कि इसके लिए कोई तरीका नहीं पा सके लेकिन मैं अपने ओवरले (वैसे भी पर टिप्पणी के कहा, मुझे क्या करना है कि प्रदर्शित करने के लिए की जरूरत कुछ जानकारी) और फिर मैं इस एनोटेशन पर टच इवेंट प्राप्त कर सकता था। मुझे पता है कि यह करने का सबसे अच्छा तरीका नहीं है, लेकिन मेरी स्थिति में, और शायद तुम्हारा, यह काम करता है;)!

18

इसे How to intercept touches events on a MKMapView or UIWebView objects? और How to determine if an annotation is inside of MKPolygonView (iOS) के संयोजन से हल किया जा सकता है। viewWillAppear में इस जोड़ें:

WildcardGestureRecognizer * tapInterceptor = [[WildcardGestureRecognizer alloc] init]; 
tapInterceptor.touchesBeganCallback = ^(NSSet * touches, UIEvent * event) { 
    UITouch *touch = [touches anyObject]; 
    CGPoint point = [touch locationInView:self.mapView]; 

    CLLocationCoordinate2D coord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; 
    MKMapPoint mapPoint = MKMapPointForCoordinate(coord); 
    for (id overlay in self.mapView.overlays) 
    { 
     if ([overlay isKindOfClass:[MKPolygon class]]) 
     { 
      MKPolygon *poly = (MKPolygon*) overlay; 
      id view = [self.mapView viewForOverlay:poly]; 
      if ([view isKindOfClass:[MKPolygonView class]]) 
      { 
       MKPolygonView *polyView = (MKPolygonView*) view; 
       CGPoint polygonViewPoint = [polyView pointForMapPoint:mapPoint]; 
       BOOL mapCoordinateIsInPolygon = CGPathContainsPoint(polyView.path, NULL, polygonViewPoint, NO); 
       if (mapCoordinateIsInPolygon) { 
        debug(@"hit!") 
       } else { 
        debug(@"miss!"); 
       } 
      } 
     } 
    } 

}; 
[self.mapView addGestureRecognizer:tapInterceptor]; 

WildcardGestureRecognizer पहले जुड़ा हुआ जवाब में है। mapView:viewForOverlay: पर कॉल करना सस्ता नहीं होगा, जिससे स्थानीय कैश मदद मिलेगी।

+0

शानदार। यह वही कोड है जिसे मैं ओवरले पर टैप करते समय पता लगाने के लिए खोज रहा था। हालांकि मैंने इसे एक टैप इशारा पहचानकर्ता नामक विधि के अंदर रखा। कस्टम इंटरसेप्टर बनाने के बिना बस ठीक काम करता है। – drekka

+0

यह आईओएस 7 पर काम करना बंद कर दिया! जहां polyView.path हमेशा शून्य है! – Bach

+5

MKPolygonView को MKPolygonRenderer के साथ बदलें - पूर्व को आईओएस 7 में बहिष्कृत किया गया था – guyh92

संबंधित मुद्दे