iOS MapKit Annotation,未显示正确的位置

J d*_*ama 3 mapkit mkannotationview ios

我使用自定义图像进行mapkit注释.但是我在使用自定义图像时遇到的主要问题是,当缩小时,注释不在地图上的正确位置,并且只有在我一直向下放大时,它才会显示注释点在正确的位置.似乎当我使用常规引脚MKPinAnnotationView时,它正常工作,因为引脚位于正确的位置放大或缩小,提前感谢任何可以提供帮助的人.

我使用的代码如下:

- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation
{

NSLog(@"welcome into the map view annotation");

if ([annotation isKindOfClass:[MKUserLocation class]])

return nil;

MKAnnotationView *pprMapNote = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pprMapNote"];


pprMapNote.image = [UIImage imageNamed:[NSString stringWithFormat:@"GPS_note.png"]];

pprMapNote.canShowCallout = YES;
pprMapNote.centerOffset = CGPointMake(-21,-60);
pprMapNote.calloutOffset = CGPointMake(0, 0);
//[pprMapNote addSubview:pprMapNoteImg];

UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
                action:@selector(showDetail)
      forControlEvents:UIControlEventTouchUpInside];
pprMapNote.rightCalloutAccessoryView = rightButton;

//remember to write in conditional for the different icons that should be loaded based on location

UIImageView *pprNoteLocIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"loc_icon_casino.png"]];
pprMapNote.leftCalloutAccessoryView = pprNoteLocIcon;
[pprNoteLocIcon release];

return pprMapNote;

}
Run Code Online (Sandbox Code Playgroud)

小智 8

您正在设置centerOffset注释视图.

请注意,此偏移量不会随缩放级别缩放.缩小越远,图像将从坐标显示得越远.

在默认情况下MKPinAnnotationView,centerOffset保留默认值0,0并且引脚图像设计为使得引脚的底点位于坐标上.因此,当您进一步缩小时,图像图像似乎相对于其下方的地图增长,但图钉的底部仍然指向坐标.

您需要centerOffset根据图像进行调整或修改图像,这样就无需进行设置centerOffset.或者只是尝试评论出设置 - centerOffset可能你不需要它.


其他一些不相关的项目:

  • 你有一个内存泄漏的pprMapNotealloc + init(添加自动释放)
  • 您应该使用dequeueReusableAnnotationViewWithIdentifier以允许重复使用注释视图.
  • 而不是使用addTarget调用自己的方法按下callout按钮,使用map视图自己的委托方法要好得多calloutAccessoryControlTapped

有关上述三点的示例,请参阅此答案.