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

时间:2011-09-18 12:24:03

标签: ios mapkit mkannotationview

我使用自定义图像进行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;

}

2 个答案:

答案 0 :(得分:8)

您正在设置注释视图的centerOffset

请注意,此偏移量使用缩放级别缩放。缩小越远,图像将从坐标开始越远。

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

您需要根据图片调整centerOffset或修改图片,这样您就无需设置centerOffset。或者只是尝试评论centerOffset的设置 - 也许你不需要它。


其他一些不相关的项目:

  • 您有pprMapNote alloc + init(添加自动释放)
  • 的内存泄漏
  • 您应该使用dequeueReusableAnnotationViewWithIdentifier来重复使用注释视图。
  • 使用地图视图自己的委托方法addTarget
  • ,而不是使用calloutAccessoryControlTapped为调出按钮调用自己的方法

有关上述三点的示例,请参阅this answer

答案 1 :(得分:3)

Pin在单独的视图中绘制,因此不会根据视图的状态进行缩放。

您必须手动设置自定义Pin图像的大小。这可以使用centerOffset轻松完成。对于大多数情况,将帧的高度设置为图像大小的一半就足够了。图像完全填充在框架中,因此您可以轻松使用此框架尺寸(高度)。

  aView.image = [UIImage imageNamed ... ];
  aView.centerOffset = CGPointMake(0,-aView.frame.size.height*0.5);