2013-10-31 142 views
0

我有MKMapView有許多註釋以正確的順序。我有按鈕更改地圖模式:帶有註釋問題的MKMapView問題

- (IBAction)userDidPressTrackButton:(id)sender { 
    if (self.mapView.userTrackingMode == MKUserTrackingModeFollow) { 
     self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading; 
     return; 
    } 

    if (self.mapView.userTrackingMode == MKUserTrackingModeFollowWithHeading) { 
     self.mapView.userTrackingMode = MKUserTrackingModeNone; 
     return; 
    } 

    if (self.mapView.userTrackingMode == MKUserTrackingModeNone) { 
     self.mapView.userTrackingMode = MKUserTrackingModeFollow; 
    } 
} 

當模式= MKUserTrackingModeFollowWithHeading註釋開始把自己以隨機順序。似乎在這種模式下,mapview開始每秒重繪一次,並將所有子視圖(註釋)以未知的順序排列。

如何取消註釋的更改順序?

回答

0

mapview.annotations獲得的註釋數組並不保證與您添加它們的順序相同。如果您以特殊順序依賴它們,可能是因爲viewForAnnotations函數錯誤。它被賦予一個annotation作爲參數,您可以使用它來確定要繪製的視圖。通常人們會製作一個實現MKAnnotation協議的自定義類,並且有一些額外的變量,用於存儲創建正確視圖所需的數據。當viewForAnnotations被調用時,它們檢查提供的註釋是否是它們的特殊類中的一個,如果是,則提取數據,使視圖返回。沒有必要知道註釋數組的順序,它不會對你有任何好處,因爲MKMapView可以並且會按照它喜歡的任何順序請求註釋。

附註:爲什麼你要編寫自己的功能來切換跟蹤模式?你可以只需use the official one,它會爲你做這一切。

+0

其實這個答案沒有幫助,但無論如何我沒有找到任何其他答案。我只是簡單地把子視圖放在前面。 –

+0

如果您已將地圖視圖放入另一個子視圖中以旋轉地圖以匹配gps標題,以避免編寫「viewForAnnotation」的正確版本,那麼您就錯了。預計註釋總是處於未知的順序。你應該畫出它所要求的那一個,而不是以特定順序排列第n個。 – Craig