My map pins can be quite densely populated so that when a pin is selected the callout pops up but is mostly obscured by all the other map pins - I can bring the Map Pin to the front it there were a delegate for selected map pin ( not tapped callout, selected pin ).
Any suggestions for a work around ?
If you are using custom annotation views you can add an observer for the selected property which would act like a delegate for when the pin is selected.
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
MKAnnotation *annview = ...code to either dequeue or create new object...
[annview addObserver:self forKeyPath:@"selected" options:NSKeyValueObservingOptionNew context:@"selectedmapannotation"];
return annview;
}
then you can monitor the selected state with
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
The answer linked by Mugunth Kumar will also give you the desired results it's just that you made mention of delegate like functionality in your question.
EDIT:
Here is an example of the contents of the observeValueForKeyPath:ofObject:change:context: method
NSString *action = (NSString*)context;
if([action isEqualToString:@"selectedmapannotation"]){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
MKAnnotationView *ann = (MKAnnotationView *)object;
if (annotationAppeared) {
// do something with the annotation when it is selected
}
else {
// do something with the annotation when it is de-selected
}
}
UICallout view is the subview of the MKAnnotationView. So, I think if you will bring Map ping to the front, UICAlloutView will be there too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With