簡體   English   中英

iOS MapKit Annotation,未顯示正確的位置

[英]iOS MapKit Annotation, not showing correct location

我使用自定義圖像進行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;

}

您正在設置注釋視圖的centerOffset

請注意,此偏移量不會隨縮放級別縮放。 縮小越遠,圖像將從坐標顯示得越遠。

在默認的MKPinAnnotationViewcenterOffset保留默認值0,0,並且引腳圖像的設計使得引腳的底點位於坐標上。 因此,當您進一步縮小時,圖像圖像似乎相對於其下方的地圖增長,但圖釘的底部仍指向坐標。

您需要根據圖像調整centerOffset或修改圖像,這樣就不需要設置centerOffset 或者只是嘗試注釋出centerOffset的設置 - 可能你不需要它。


其他一些不相關的項目:

  • 你有pprMapNote alloc + init的內存泄漏(添加自動釋放)
  • 您應該使用dequeueReusableAnnotationViewWithIdentifier來允許重復使用注釋視圖。
  • 而不是使用addTarget為callout按鈕調用自己的方法,最好使用map視圖自己的委托方法calloutAccessoryControlTapped

有關上述三點的示例,請參閱此答案

Pin在單獨的視圖中繪制,因此不會根據視圖的狀態進行縮放。

您必須手動設置自定義Pin圖像的大小。 這可以使用centerOffset輕松完成。 對於大多數情況,將幀的高度設置為圖像大小的一半就足夠了。 圖像完全填充在框架中,因此您可以輕松使用此框架尺寸(高度)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM