2011-09-18 71 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

這解決了這個問題。 –