2011-09-18 67 views
3

我使用自定义图像作为我的mapkit注释。但是,我在使用自定义图像时遇到的主要问题是缩小时,注释不在地图上的正确位置,直到我放大缩小后,才会显示注释点在正确的地方。看来,当我使用一个普通的针脚MKPinAnnotationView,它正常工作,因为针在放大或缩小的正确位置,预先感谢任何人可以帮助。iOS MapKit注解,未显示正确的位置

我用的代码如下:

- (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; 

} 

回答

8

您设置注释视图的centerOffset

请注意,此偏移量是而不是与缩放级别缩放。缩小的越远,图像将从坐标出现越远。

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

您需要根据您的图片调整centerOffset或修改图片,因此您无需设置centerOffset。或者只是尝试评论centerOffset的设置 - 可能你不需要它。


其他一些无关的项目:

  • 你有(添加一个自动释放)
  • 您应该使用dequeueReusableAnnotationViewWithIdentifier允许注解视图再利用为pprMapNote ALLOC +初始化内存泄漏。
  • 而不是使用addTarget打电话给你自己的标注按钮按下的方法,这是更好的使用地图视图自己的委托方法calloutAccessoryControlTapped

this answer对于以上三点的一个例子。

+0

谢谢安娜,会试试看! –

3

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

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

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

这解决了这个问题。 –