2012-07-11 105 views
12

我們可以在iOS中爲用戶當前位置提供自定義註釋視圖嗎?用戶位置的自定義註釋視圖不移動地圖視圖

我需要刪除與我自己的自定義視圖(說一些ping pin)的藍點(帶圓圈)。是否有可能做到這一點?

如果我們這樣做,當用戶的位置發生變化時,此引腳是否會移動到新位置?或者我們需要以編程方式處理它?

我觀察到,如果我們對用戶的當前位置使用默認藍點,則當用戶位置發生更改時,它會在地圖中更新。

我只想知道這是否可以用我們自己的自定義視圖來完成。

回答

14

是的,您可以爲用戶的位置提供自定義視圖。

不幸的是,它比實際應用更難實現,因爲即使documentation for the viewForAnnotation delegate method聲稱如果註釋類是MKUserLocation,您可以提供自己的視圖,那麼自定義視圖不會隨用戶的位置而繼續移動。實際上,當自定義視圖返回MKUserLocation時,地圖視圖會完全更新用戶位置(地圖視圖的didUpdateUserLocation委託方法不再觸發)。我相信這是一個錯誤。

一種解決方法是使用CLLocationManager和一個自定義的註釋......


確保showsUserLocationNO或取消選中在地圖視圖。

聲明爲CLLocationManager和屬性使用實現了MKAnnotation協議(或者你可以只使用通用MKPointAnnotation類)的自定義類的自定義註釋。

viewDidLoad或其他適當的地方,創建CLLocationManager,設置它的delegate並呼叫startUpdatingLocation

location manager's didUpdateToLocation delegate method地圖視圖的didUpdateUserLocation委託方法),創建或更新您的自定義註釋:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (myUserLocAnnot == nil) 
    { 
     self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease]; 
      //remove the autorelease if using ARC 
     myUserLocAnnot.title = @"You are here"; 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
     [mapView addAnnotation:myUserLocAnnot]; 
    } 
    else 
    { 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
    } 
} 

最後,在地圖視圖中的viewForAnnotation委託方法,你會返回一個自定義的註釋圖如果註釋是您的自定義用戶位置註釋。

+0

面臨同樣的問題,也許我們可以提出一個bug到蘋果 – darshansonde 2012-07-12 07:16:18

+0

謝謝安娜,它的工作現在。即使我懷疑mapview中有一個錯誤,它在我們設置時沒有顯示用戶位置的自定義註釋視圖。 – nkd 2012-07-12 10:28:37

+0

但我在這裏遇到的另一個問題是,一旦開始位置更新,我就會將調用返回給locationManager:didUpdateToLocation:fromLocation方法,我在其中創建註釋並將其添加到地圖,但地圖甚至沒有顯示我的自定義視圖儘管我正在返回自定義視圖。如果我關閉位置和位置,它就會起作用。這裏有什麼問題嗎? – nkd 2012-07-12 15:03:50