2011-09-27 82 views
0

在我的應用程序中,我有一個MKMapView,其中顯示了幾個註釋。地圖根據設備的標題旋轉。要旋轉執行以下語句地圖(通過該方法的LocationManager叫:didUpdateHeading :)iOS在MKMapView旋轉的響應中旋轉MKAnnotationView

self.navigationMapView.mapView.transform = CGAffineTransformMakeRotation(-heading); 

在標題(磁)以弧度表示。我注意到,即使地圖上的註釋旋轉,我也不想要它。我試圖修復它在下面的方法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ 

    static NSString *identifier = @"AnnotationViewIdentifier"; 

    MKAnnotationView *av = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

    if (av == nil) { 
     av = [[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier] autorelease]; 
    } 
    else{ 
     av.annotation = annotation; 
    } 

    av.transform = CGAffineTransformMakeRotation(degreesToRadians(self.arController.currentHeading.magneticHeading)); 

    av.canShowCallout = YES; 
    return av; 

} 

,我想從調用此方法「didUpdateHeading:」但我真的不知道該怎麼做。 TableView類具有調用委託方法的reloadData函數,但這裏看起來不同。有什麼建議麼?!

另一個問題,我在地圖上的註釋顯示與用戶的距離,我想在用戶更改位置時立即更新它們(距離標籤)。有什麼建議麼?!

回答

1

因此,一個MKMapView有一個被調用是有點惱人的。基本上你有兩種選擇之一。選項1:在屏幕上創建註釋數組,然後將其從map_view中移除,然後將其重新添加到map_view。基本上創建您自己的重新加載數據功能。方案2:做一些簡單的事情,如

CGLocationCoordinate2D coordinate = map_view.center; 
map_view.center = coordinate; 

- 本質上,重點是地圖的一個屬性,導致它重繪。但是這個選項並不總是能夠工作。選項1有較高的工作機會,但是也有可能失敗,所以如果簡單地取消註釋並重新添加它們不會導致任何事情發生,那麼簡單地減少地圖,然後在地圖刷新函數末尾重新創建地圖。喜歡。

[my_map_view removeFromSuperView]; 
[my_map_view release]; 
my_map_view = nil; 
my_map_view = [[MKMapView alloc] initWithFrame:CGRectMake(0,0,320,480)]; 

這些選項之一應該工作。我必須爲我的解決方案做一個選項,但我知道有些人是幸運的,選項2也是如此。

+0

由於註釋被刪除,然後通過「didUpdateHeading」委託方法調用的方法重新添加,問題是現在註釋在屏幕上閃爍,並且無法選擇它們。選項2不起作用...我猜想選項3不是更有效。有什麼建議麼? – ubiAle

+0

您是否認爲某些問題可能是註釋以某種方式從屏幕上移除了,但地圖並不清晰?這可能與您的代碼? – Tony