Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MKAnnotation image offset with custom pin image

I have a MKAnnotation with an custom pin image. However the pin(MKAnnotationView) centers the image in relation to the specified coordinate. I want to set the point of the coordinate at the bottom center of the image, not center.

I've tried using annView.centerOffset = CGPointMake(-12, -28);. But the problem is that centerOffset isn't relevant to the maps zoom level.

One can do this both in the JS API and in Android. Is there any possibility to do this in objective-c?

..fredrik

like image 549
fredrik Avatar asked Nov 17 '11 10:11

fredrik


3 Answers

Your UIAnnotationView is always drawn at the same scale, the map's zoom level doesn't matter. That's why centerOffset isn't bound with the zoom level.

annView.centerOffset is what you need. If you see that your pin is not at the good location (for example, the bottom center move a little when you change the zoom level), it's because you didn't set the right centerOffset.

By the way, if you want to set the point of the coordinate at the bottom center of the image, the x coordinate of your centerOffset should be 0.0f, as annotationView center the image by default. So try :

annView.centerOffset = CGPointMake(0, -imageHeight / 2);
like image 122
Zoleas Avatar answered Nov 02 '22 18:11

Zoleas


Setting the centerOffset often moves the image arround when user rotates or zooms the map, as anchor point is still set to the center of the image instead of its lower center.

You can set the anchor point of the annotation to the bottom center of you custom image as follows:

yourAnnotation.layer.anchorPoint = CGPointMake(0.5f, 1.0f);

This way when user zooms or rotates the map your custom annotation will never move from its coordinates on the map.

like image 41
Pancho Avatar answered Nov 02 '22 19:11

Pancho


You can use this guide to figure out your center offset.

MKAnnotationView centerOffset guide

like image 20
richy Avatar answered Nov 02 '22 17:11

richy