Reputation: 1200
The regular annotation pin's origin is in the middle of the bottom so, the pin always point to the same place.
But when I add my custom image, its origin is the center of the image, so every zoom in or out, the bottom of my image point to a different place.
Here my pin is supposed to point to the center of paris BUT
but when I zoom in, the bottom of my pin isn't pointing to the center of Paris.
I'm trying with the CGRect.origin
but didn't get anything useful.
Here is my code:
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKAnnotationView * customPinView = [[MKAnnotationView alloc] init];
UIImage * img = [UIImage imageNamed:@"waterPin.png"] ;
CGRect resizeRect;
resizeRect.size.height = 40;
resizeRect.size.width = 40;
resizeRect.origin = (CGPoint){0.0f, 0.0f};
UIGraphicsBeginImageContext(resizeRect.size);
[img drawInRect:resizeRect];
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
customPinView.image = resizedImage;
return customPinView;
}
Upvotes: 8
Views: 4472
Reputation:
MKAnnotationView
has a centerOffset
property which you can try setting to adjust the image offset:
customPinView.centerOffset = CGPointMake(xOffset,yOffset);
Unrelated, but you should use initWithAnnotation
instead of just init
for creating an MKAnnotationView
.
It also wouldn't hurt to use dequeueReusableAnnotationViewWithIdentifier
and implement annotation view re-use to improve performance.
I would also suggest not programmatically resizing the image in the delegate method and instead using an already-resized image to begin with. Then you can just do customPinView.image = [UIImage imageNamed:@"resizedWaterPin.png"];
without spending run-time resizing the annotation images every time.
Upvotes: 13