Mapkit Callout Accessory Button Activation - ios

I am using MapKit to display a map with many annotations. Each of these annotations has a callout with a UIButton. Most everything works properly, but any time there is an annotation behind the UIButton, it becomes impossible to activate it. I want the UIButton to be activatable regardless of background annotations. Is there a way to ignore the annotations directly behind the callout?

I have found an appropriate workaround to this issue:
(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
[view.superview bringSubviewToFront:view];
}
https://github.com/danielbarela/ios-map-callout-test/issues/1

Related

iOS 11 MKAnnotationView prepareForReuse dismiss the pin view in Map view

what I want to do is when I deselect an pin, the pin view change it's UI back to unselected state(e.g change color of background of the pin)
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
//do something;
XLMapItemAnnotation* mapItem = [self annotationForView:view];
[view prepareForReuse];
}
by having this code, when I run the app in iOS 11, if I deselect a pin, the pin disappear in the map view totally. and if I remove the prepareForReuse, everything would be fine.
and the some code if I run the app in iOS 10, everything is fine, no pin get disappeared.
can sbd give me a hint, what could be wrong?
You should not call -prepareForReuse yourself, it's intended for MapKit to call itself.
As #Tim Johnsen said, -prepareForReuse is intended for MKAnnotationView's reuse mechanism, you should not call it yourself.
In iOS 11, MapKit introduce clustering algorithm for MKAnnotationView(But after some try, I found it cause strange behavior sometimes). In this case, MKAnnotationView.isHidden is set as true by default. So after you invoking -prepareForReuse, MKAnnotationView is hidden.
If you want to change color of the pin, just change pinTintColor property directly, or use a function to reset all properties as needed.

Create custom call out for mapbox in ios

I am using map box sdk for my application to get customized map. I able to change color of land, sea, street,etc. But I also have to make callout customized as show in image below. The small rectangle is closed callout the big rectangle is when call out pop is up.
The documentation contains an example of how to do this.
You have to implement the following delegate method and return your custom marker.
- (RMMapLayer *)mapView:(RMMapView *)mapView layerForAnnotation:(RMAnnotation *)annotation

What exactly is this grey colored popup called in MapKit & what method gets called when tapped?

Ok I have this mapview with location pins, 5 shown here:
But what is the grey popup that shows up when you tap a pin, called?
And what method gets called when you tap on the pin, that contains or fetches the pin data to be displayed on that grey call out?
They're called callouts, and - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation is called when a pin is tapped. To see how to use them, I recommend this tutorial: http://www.raywenderlich.com/21365/introduction-to-mapkit-in-ios-6-tutorial
It's a private class and, as mentioned, is called an annotation callout. Check out https://github.com/nfarina/calloutview for an open source clone of it and http://www.mapbox.com/mapbox-ios-sdk/ for an open source clone of MapKit that uses it natively.

MKMapKit disalow deselection of callout bubble

I would like to know how I can make sure that a callout bubble can't get deselected on a MKMapView.
Whenever I press on the map (background), this view:
Turns to:
Which I do not want to allow. Yet I do want to keep the callOutButton support.
You could just programmatically select your annotation whenever annotations get deselected (using the corresponding delegate method). If you don't animate this selection then it looks as if the annotation never got deselected in the first place.
Example:
// MKMapView Delegate
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {
// Replace "myAnnotation" with whichever annotation you need to remain selected
[mapView selectAnnotation:self.myAnnotation animated:NO];
}
I tried this in a test project and it works fine (it doesn't flicker or anything). It's not exactly disabling deselection but the resulting effect is the same, so it might be a good workaround.

Map callout expansion animation like the one in Maps when the disclosure button is pressed

When selecting the disclosure button on a callout, the callout animates to the slide over and expand into larger area with more information.
Besides making this component from scratch, does anyone know how to make annotation callouts do this?
According to this: http://www.cocoacontrols.com/controls/gikanimatedcallout
, Apple is using a private API. The link above has code that tries to replicate what Apple does.
you should use below delegate method
(void)mapView:(MKMapView *)mapview annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
then in this delegate method, you should create an disclosure button.
if(buttonType==disclosurebutton) then show custom UIView.
I think that will help overall.

Resources