最近在開發 iOS APP 時,有用到地圖的功能,我需要把自訂的大頭針擺放到特定的位置,並且要顯示自訂的圖片。這並不是什麼困難的要求,只是我發現自訂的大頭針圖片(MKAnnotationView)總是有所偏移,不會正好釘在我要的位置,還好最後找到解決辦法。

需求:
有自訂的大頭針圖片,「針頭」的位置就是圖片底部中央的位置,要讓「針頭」正好顯示於地圖上的特定座標,不會有所偏移。

解法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation> )annotation {
  if ([annotation isKindOfClass:[MyAnnotation class]]) {
    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
    if (!aView) {
      aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
      aView.image = [UIImage imageNamed:@"pin-image"];
      aView.layer.anchorPoint = CGPointMake(0.5, 1);
    }
    return aView;
  }
  return nil;
}

重點在那一行 aView.layer.anchorPoint = CGPointMake(0.5, 1),如果「針頭」不是正好在圖片底部中央的話,就得再調整 anchorPoint