2011-10-25 66 views
1

我需要在MKMapView上顯示數千個針腳,並且我需要一個很好的代理方法來添加針腳。 didUserUpdateLocation不好,因爲它被多次觸發。將數千個引腳添加到MKMapView的最佳方式是什麼?MKMapView在地圖上加載數千個針腳

UPDATE:

我只是用一個BOOL檢查只有一次加載引腳和它似乎工作真的很不錯!

-(void) mapView:(MKMapView *) mv didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    NSLog(@"didUpdateUserLocation"); 

    if(self.isMapped) return; 

    for(Facility *facility in self.facilities) 
    { 
     CLLocationCoordinate2D facilityCoord = { facility.latitude,facility.longitude }; 


     MapPoint *mp = [[MapPoint alloc] initWithCoordinate:facilityCoord title:facility.facilityName]; 



     [mv addAnnotation:mp]; 

    } 

    self.isMapped = YES; 

} 
+0

考慮下面的Jano的答案。由於器件的內存限制,您應該按需加載引腳。這是委託方法的原因。看看wwdc 2010視頻。他們在那裏有一些很好的地圖套件優化。 – timthetoolman

+0

@timthetoolman是的好建議! – azamsharp

回答

8

我使用mapView:regionDidChangeAnimated :.我從核心數據過濾經緯度的數據來獲取當前區域和周圍環境的引腳,這樣用戶可以滾動一點而不需要再次提取數據。

縮小時,您可以決定顯示數據的羣集版本,您可以使用K-Means算法在運行時預先計算或計算。

如果您有大量數據使用基於結構而不是對象的輕型數據結構,則可能會有所幫助。

添加和刪除引腳時,您可能需要爲淡入/淡出設置動畫,以平滑過渡。在屏幕上彈出和彈出東西是一種糟糕的用戶體驗。

如果所有這些都涉及服務器調用,那麼可以將調用封裝在NSOperations中,以便在用戶在地圖中移動得太快時可以取消舊調用。

+0

查看我更新的問題!我添加了一個BOOL標誌,以便只在第一次加載引腳。 – azamsharp

+0

如果唯一的問題是添加引腳一次,[viewDidLoad](http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html)似乎是一個更好的候選人,因爲它是隻有在視圖加載時才執行一次。 – Jano

+0

你是對的! viewDidLoad更有意義!感謝所有的幫助!真的很感激它! – azamsharp

相關問題