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