मैं समझता हूँ कि आप एक कस्टम कॉलआउट के साथ एक पिन चाहते हैं।
हम कस्टम कॉलआउट नहीं बना सकते हैं, लेकिन हम पूरी तरह से अनुकूलित दृश्य के साथ एक एनोटेशन बना सकते हैं। तो चाल पहली बार चुने जाने पर दूसरी एनोटेशन जोड़ना है, और दूसरा एनोटेशन व्यू कॉलआउट बबल की तरह दिखता है। MKAnnotationView - Lock custom annotation view to pin on location updates, जो बारी में एक blog post Asynchrony समाधान से में आधारित है:
यह समाधान उपयोगकर्ताओं djibouti33 और जवाब में jacob-jennings द्वारा पोस्ट की गई है। स्पष्टीकरण उद्देश्यों के लिए, यहां कुछ यूएमएल एक फोर्कड प्रोजेक्ट से है: 
यह एक बड़ा हैक है, लेकिन कस्टम एनोटेशन को लागू करने के लिए मैंने सबसे साफ तरीका भी देखा है।
एनएसओब्जेक्ट "सामग्री" कक्षा के साथ प्रारंभ करें जिसमें समन्वय है, कॉलआउट दृश्य का वर्ग उपयोग करने के लिए (यूएमएल में एनोटेशन व्यू है, लेकिन आप अधिक बना सकते हैं और उन्हें यहां सेट कर सकते हैं), और यादृच्छिक मानों का एक शब्दकोश शीर्षक, फोटो यूआरएल, आदि। इस वर्ग का उपयोग एमकेएएनोटेशन "एनोटेशन" ऑब्जेक्ट को शुरू करने के लिए करें।
#import <MapKit/MapKit.h>
@interface Content : NSObject
@property (nonatomic,assign) CLLocationCoordinate2D coordinate;
// ...
@interface Annotation : NSObject <MKAnnotation, AnnotationProtocol>
-(id) initWithContent:(Content*)content;
// ...
एनोटेशन यह अपने आप ही MKAnnotationView के निर्माण को संभालने के लिए चाहता है की घोषणा करने के AnnotationProtocol लागू करता है। यही कारण है, अपने MKMapViewDelegate इस तरह कोड होना चाहिए:
- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation
{
// if this is a custom annotation, delegate the implementation of the view
if ([annotation conformsToProtocol:@protocol(AnnotationProtocol)]) {
return [((NSObject<AnnotationProtocol>*)annotation) annotationViewInMap:mapView];
} else {
// else, return a standard annotation view
// ...
}
}
दृश्य लौटे प्रकार AnnotationView, जो AnnotationViewProtocol लागू करता है की घोषणा करते हुए यह चयन/अचयन को संभालने के लिए चाहता है के लिए किया जाएगा। इसलिए, अपने मानचित्र में नियंत्रक देखें, विधियों का नक्शा दृश्य: किया गया चयन करें नोट: और नक्शा दृश्य: didDeselectAnnotationView: जैसा हमने पहले देखा था उसी तरह से प्रतिनिधि होना चाहिए।
जब एनोटेशन का चयन किया जाता है, तो दूसरी एनोटेशन (कॉलआउट एनीोटेशन) जोड़ा जाता है, जो एक ही व्यवहार का पालन करता है, लेकिन इस बार दृश्य लौटाया जाता है (कॉलआउट व्यू) को XIB से प्रारंभ किया जाता है, और कोर ग्राफिक्स कोड (बेसकॉलआउट व्यू में) में होता है एक कॉलआउट एनिमेट और दोहराना।
CalloutView वर्ग के प्रारंभकर्ता:
- (id)initWithAnnotation:(CalloutAnnotation*)annotation
{
NSString *identifier = NSStringFromClass([self class]);
self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
if (self!=nil){
[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil];
// prevent the tap and double tap from reaching views underneath
UITapGestureRecognizer *tapGestureRecognizer = ...
}
return self;
}
कॉलआउट दृश्य मैं सूचनाओं का इस्तेमाल किया से एक और दृश्य नियंत्रक पुश करने के लिए सक्षम होने के लिए।
शीर्ष पर लिंक किए गए SO उत्तर में इस कोड को लागू करने वाली दो पूर्ण परियोजनाएं शामिल हैं (कक्षा के नाम भिन्न हो सकते हैं)। मेरे पास U12 का उपयोग https://github.com/j4n0/callout पर एक और प्रोजेक्ट है।
मुझे लगता है कि यह एक कस्टम पिन के साथ एक कस्टम दृश्य है, आपकी असली समस्या क्या है? – Mat
बहुत अच्छा सवाल .. यह मुझे भी मदद करता है .. बहुत धन्यवाद जेनिस .. –
नमूना डेमो - http://stackoverflow.com/questions/27519517/button-action-in-mkannotation-view-not-working/27519673#27519673 – Kampai