दिलचस्प पोस्ट
एंड्रॉइड ऐप 0 डिवाइसों द्वारा समर्थित है jQuery आर्ट बनाम सहारा? एसवीजी एनीमेशन IE11 पर काम नहीं कर रहा है HTML <चयन करें> चयनित विकल्प पृष्ठभूमि रंग सीएसएस शैली जनसंपर्क और अंडाकार कैसे जांचें कि क्या अजगर मॉड्यूल इसे आयात किए बिना मौजूद है JavaScript में URL को पार्स करें प्ले स्टोर पर प्रकाशित ऐप Google मानचित्र एपीआई और फेसबुक एपीआई के साथ संवाद नहीं कर सकता है PHP के साथ MySQL डाटाबेस में सरणी डालें jQuery अजाक्स सफलता अनाम समारोह गुंजाइश Chrome में मॉनिटरिंग का अनुरोध करें मुख्य की उचित घोषणा क्या है? Android पर 'संदर्भ' प्राप्त करने का स्थिर तरीका है? मौजूदा सरणी से उप-सरणी प्राप्त करना मैं विंडोज सीएमडी में एक पंक्ति में दो आज्ञा कैसे चला सकता हूं?

MKAnnotationView के लिए कॉलआउट बबल को कैसे अनुकूलित करें?

मैं वर्तमान में मानचित्रकिट के साथ काम कर रहा हूं और मैं फंस गया हूँ

मेरे पास एक कस्टम एनोटेशन दृश्य है जो मैं उपयोग कर रहा हूं, और मैं अपने स्वयं के आइकन के साथ मानचित्र पर बिंदु प्रदर्शित करने के लिए छवि प्रॉपर्टी का उपयोग करना चाहता हूं। मेरे पास यह काम ठीक है। लेकिन मैं क्या करना चाहूँगा डिफ़ॉल्ट कॉलआउट दृश्य को ओवरराइड करना (ब्बुला जो शीर्षक आइकन छू दिया गया है जब शीर्षक / उपशीर्षक के साथ दिखाया गया है)। मैं कॉलआउट को खुद ही नियंत्रित करने में सक्षम होना चाहता हूं: मैपकिट केवल बाएं और दायां सहायक कॉलआउट दृश्यों तक पहुंच प्रदान करता है, लेकिन कॉलआउट बबल के लिए कस्टम दृश्य प्रदान करने का कोई तरीका नहीं है, या इसे शून्य आकार या अन्य कुछ भी देना

मेरा विचार था कि मेरी MKMapViewDelegate में ऐनोटेशन / अचयनित चयन को ओवरराइड करना था, और फिर मेरे कस्टम एनोटेशन व्यू को कॉल करके अपना खुद का कस्टम दृश्य खींचना था। यह काम करता है, लेकिन जब केवल मेरे कस्टम एनोटेशन व्यू क्लास में YES में सेट किया जाता है तो canShowCallout । ये तरीकों को नहीं कहा जाता है अगर मेरे पास यह सेट NO (जो कि मैं चाहता हूं, ताकि डिफ़ॉल्ट कॉलआउट बबल तैयार नहीं हो)। इसलिए मेरे पास यह जानने का कोई तरीका नहीं है कि उपयोगकर्ता ने मैप पर मेरे बिंदु पर चुने हुए (चयनित) या किसी बिंदु को छुआ है जो कि डिफ़ॉल्ट कॉलआउट बबल दृश्य को दिखाने के बिना मेरे एनोटेशन दृश्य (इसे पसंद किया गया) का हिस्सा नहीं है।

मैंने एक अलग रास्ता नीचे जाने की कोशिश की और बस मानचित्र में सभी स्पर्श ईवेंट को संभालने की कोशिश की, और मुझे ये काम मिल रहा नहीं लगता। मै मानचित्र दृश्य में टच ईवेंट को पकड़ने से संबंधित अन्य पोस्ट पढ़ता हूं, लेकिन वे वही नहीं हैं जो मैं चाहता हूं। ड्राइंग से पहले कॉलआउट बबल को निकालने के लिए मानचित्र दृश्य में खुलने का एक तरीका है? मुझे हानि हो रही है।

कोई सुझाव? क्या मुझसे साफ़ – साफ़ कुछ चीज़ चूक रही है?

वेब के समाधान से एकत्रित समाधान "MKAnnotationView के लिए कॉलआउट बबल को कैसे अनुकूलित करें?"

एक आसान समाधान भी है

कस्टम UIView (अपने कॉलआउट के लिए) बनाएं

फिर MKAnnotationView उपवर्ग बनाएं और सेट ओवरराइड निम्नानुसार setSelected :

 - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if(selected) { //Add your custom view to self... } else { //Remove your custom view... } } 

बूम, काम किया

detailCalloutAccessoryView

पुराने दिनों में यह एक दर्द था, लेकिन ऐप्पल ने इसे सुलझाया है, बस एम.के. एनोटेशन दृश्य पर दस्तावेज़ों की जांच करें

 view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) view.canShowCallout = true view.detailCalloutAccessoryView = UIImageView(image: UIImage(named: "zebra")) 

वास्तव में, यही वह है कोई भी UIView लेता है

@ टैपकैंडी के शानदार जवाब से जारी रहना, यदि आप अपने बुलबुले को मूलभूत रूप में उसी तरह बदलना चाहते हैं, तो मैंने इस एनीमेशन विधि का उत्पादन किया है:

 - (void)animateIn { float myBubbleWidth = 247; float myBubbleHeight = 59; calloutView.frame = CGRectMake(-myBubbleWidth*0.005+8, -myBubbleHeight*0.01-2, myBubbleWidth*0.01, myBubbleHeight*0.01); [self addSubview:calloutView]; [UIView animateWithDuration:0.12 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^(void) { calloutView.frame = CGRectMake(-myBubbleWidth*0.55+8, -myBubbleHeight*1.1-2, myBubbleWidth*1.1, myBubbleHeight*1.1); } completion:^(BOOL finished) { [UIView animateWithDuration:0.1 animations:^(void) { calloutView.frame = CGRectMake(-myBubbleWidth*0.475+8, -myBubbleHeight*0.95-2, myBubbleWidth*0.95, myBubbleHeight*0.95); } completion:^(BOOL finished) { [UIView animateWithDuration:0.075 animations:^(void) { calloutView.frame = CGRectMake(-round(myBubbleWidth/2-8), -myBubbleHeight-2, myBubbleWidth, myBubbleHeight); }]; }]; }]; } 

यह काफी जटिल दिखता है, लेकिन जब तक आपके कॉलआउट बुलबुले का केंद्र केंद्र-नीचे के लिए डिज़ाइन किया गया है, तब तक आपको अपने myBubbleHeight myBubbleWidth और myBubbleHeight को प्रतिस्थापित करने में सक्षम होना चाहिए, अपने काम के लिए अपने आकार के साथ। और यह सुनिश्चित करने के लिए याद रखें कि आपके autoResizeMask अपनी autoResizeMask प्रॉपर्टी सेट की गई है, 63 (यानी "सभी") ताकि वे एनीमेशन में सही तरीके से चले जाएं।

: -Joe

यह मेरे लिए सबसे अच्छा समाधान साबित हुआ अपने स्वयं के अनुकूलन करने के लिए आपको कुछ रचनात्मकता का उपयोग करना होगा

अपने MKAnnotationView उपवर्ग में, आप उपयोग कर सकते हैं

 - (void)didAddSubview:(UIView *)subview{ int image = 0; int labelcount = 0; if ([[[subview class] description] isEqualToString:@"UICalloutView"]) { for (UIView *subsubView in subview.subviews) { if ([subsubView class] == [UIImageView class]) { UIImageView *imageView = ((UIImageView *)subsubView); switch (image) { case 0: [imageView setImage:[UIImage imageNamed:@"map_left"]]; break; case 1: [imageView setImage:[UIImage imageNamed:@"map_right"]]; break; case 3: [imageView setImage:[UIImage imageNamed:@"map_arrow"]]; break; default: [imageView setImage:[UIImage imageNamed:@"map_mid"]]; break; } image++; }else if ([subsubView class] == [UILabel class]) { UILabel *labelView = ((UILabel *)subsubView); switch (labelcount) { case 0: labelView.textColor = [UIColor blackColor]; break; case 1: labelView.textColor = [UIColor lightGrayColor]; break; default: break; } labelView.shadowOffset = CGSizeMake(0, 0); [labelView sizeToFit]; labelcount++; } } } } 

और यदि UICalloutView एक UICalloutView , तो आप इसके साथ घूम सकते हैं, और इसके अंदर क्या है

मुझे भी यही समस्या थी। इस ब्लॉग के बारे में ब्लॉग पोस्ट की एक गंभीर समस्या है http://spitzkoff.com/craig/?p=81

बस MKMapViewDelegate का उपयोग करके आप यहां और MKMapView subclassing और मौजूदा कार्यक्षमता का विस्तार करने की कोशिश भी मेरे लिए काम नहीं किया है।

मैं क्या कर रहा हूं मेरा अपना CustomCalloutView बनाने के लिए है जो कि मेरे MKMapView शीर्ष पर है I आप इस दृश्य को किसी भी तरह से शैली में कर सकते हैं।

मेरे CustomCalloutView में इस तरह की एक विधि है:

- (void) openForAnnotation: (id)anAnnotation { self.annotation = anAnnotation; // remove from view [self removeFromSuperview]; titleLabel.text = self.annotation.title; [self updateSubviews]; [self updateSpeechBubble]; [self.mapView addSubview: self]; }
- (void) openForAnnotation: (id)anAnnotation { self.annotation = anAnnotation; // remove from view [self removeFromSuperview]; titleLabel.text = self.annotation.title; [self updateSubviews]; [self updateSpeechBubble]; [self.mapView addSubview: self]; } 

यह एक MKAnnotation ऑब्जेक्ट लेता है और अपना स्वयं का शीर्षक सेट करता है, इसके बाद यह दो अन्य विधियों को कॉल करता है जो काफी बदसूरत होते हैं जो कॉलआउट सामग्री की चौड़ाई और आकार समायोजित करते हैं और उसके बाद उसके आस-पास भाषण बबल को सही स्थिति पर खींचते हैं।

अंत में नक्शादृश्य को एक सबव्यू के रूप में देखा जाता है। इस समाधान के साथ समस्या यह है कि कॉलआउट को सही स्थिति में रखना मुश्किल है जब मानचित्र दृश्य स्क्रॉल किया जाता है। मैं कॉलआउट को नक्शे दृश्य में छुपा रहा हूं, इस समस्या को हल करने के लिए एक क्षेत्र परिवर्तन पर विधि का प्रतिनिधित्व करता हूं।

उन सभी समस्याओं को हल करने के लिए कुछ समय लगा, लेकिन अब कॉलआउट आधिकारिक रूप से बर्ताव करता है, लेकिन मेरी यह मेरी अपनी शैली में है

असल में इसे हल करने के लिए, एक की जरूरत है: क) डिफ़ॉल्ट कॉलआउट बुलबुले को आने से रोकें। ख) यह पता लगाएं कि कौन सा एनोटेशन क्लिक किया गया था।

मैं इनके द्वारा प्राप्त कर पा रहा था: ए) सेटिंग कर सकते हैंशोवलआउट से बी ख) उप-क्लासिंग, एमके पिन अननोटेशन देखें और छू को ओवरराइड करना और छूने वाले तरीकों

नोट: आपको MKAnnotationView के लिए टच इवेंट्स को संभालना और MKMapView नहीं चाहिए

मैं सिर्फ एक दृष्टिकोण के साथ आया, यह विचार यहां है

  // Detect the touch point of the AnnotationView ( i mean the red or green pin ) // Based on that draw a UIView and add it to subview. - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated { CGPoint newPoint = [self.mapView convertCoordinate:selectedCoordinate toPointToView:self.view]; // NSLog(@"regionWillChangeAnimated newPoint %f,%f",newPoint.x,newPoint.y); [testview setCenter:CGPointMake(newPoint.x+5,newPoint.y-((testview.frame.size.height/2)+35))]; [testview setHidden:YES]; } - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { CGPoint newPoint = [self.mapView convertCoordinate:selectedCoordinate toPointToView:self.view]; // NSLog(@"regionDidChangeAnimated newPoint %f,%f",newPoint.x,newPoint.y); [testview setCenter:CGPointMake(newPoint.x,newPoint.y-((testview.frame.size.height/2)+35))]; [testview setHidden:NO]; } - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { NSLog(@"Select"); showCallout = YES; CGPoint point = [self.mapView convertPoint:view.frame.origin fromView:view.superview]; [testview setHidden:NO]; [testview setCenter:CGPointMake(point.x+5,point.y-(testview.frame.size.height/2))]; selectedCoordinate = view.annotation.coordinate; [self animateIn]; } - (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view { NSLog(@"deSelect"); if(!showCallout) { [testview setHidden:YES]; } } 

यहां – टेस्टव्यूव्यू एक 320×100 आकार के यूआईवीयूवी है – शो कॉलआउट है BOOL – [self animateIn]; यह समारोह है जो UIAlertView जैसे एनीमेशन को देखता है

आप leftoutView का उपयोग कर सकते हैं, एनोटेशन.टेक्स्ट @ @ पर सेट कर सकते हैं।

कृपया उदाहरण कोड के नीचे ढूंढें:

 pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; if(pinView == nil){ pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; } CGSize sizeText = [annotation.title sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:12] constrainedToSize:CGSizeMake(150, CGRectGetHeight(pinView.frame)) lineBreakMode:UILineBreakModeTailTruncation]; pinView.canShowCallout = YES; UILabel *lblTitolo = [[UILabel alloc] initWithFrame:CGRectMake(2,2,150,sizeText.height)]; lblTitolo.text = [NSString stringWithString:ann.title]; lblTitolo.font = [UIFont fontWithName:@"HelveticaNeue" size:12]; lblTitolo.lineBreakMode = UILineBreakModeTailTruncation; lblTitolo.numberOfLines = 0; pinView.leftCalloutAccessoryView = lblTitolo; [lblTitolo release]; annotation.title = @" "; 

मैंने अपने उत्कृष्ट एसएमसीऑलआउटव्यू के कांटा को धकेल दिया है जो कॉलआउट के लिए एक कस्टम दृश्य प्रदान करने और लचीला चौड़ाई / ऊंचाइयों को बहुत दर्द रहित तरीके से पेश करने के मुद्दे को हल करता है। अभी भी कुछ quirks बाहर काम करने के लिए, लेकिन यह अभी तक बहुत कार्यात्मक है:

https://github.com/u10int/calloutview