我們可以在iOS中爲用戶當前位置提供自定義註釋視圖嗎?用戶位置的自定義註釋視圖不移動地圖視圖
我需要刪除與我自己的自定義視圖(說一些ping pin)的藍點(帶圓圈)。是否有可能做到這一點?
如果我們這樣做,當用戶的位置發生變化時,此引腳是否會移動到新位置?或者我們需要以編程方式處理它?
我觀察到,如果我們對用戶的當前位置使用默認藍點,則當用戶位置發生更改時,它會在地圖中更新。
我只想知道這是否可以用我們自己的自定義視圖來完成。
我們可以在iOS中爲用戶當前位置提供自定義註釋視圖嗎?用戶位置的自定義註釋視圖不移動地圖視圖
我需要刪除與我自己的自定義視圖(說一些ping pin)的藍點(帶圓圈)。是否有可能做到這一點?
如果我們這樣做,當用戶的位置發生變化時,此引腳是否會移動到新位置?或者我們需要以編程方式處理它?
我觀察到,如果我們對用戶的當前位置使用默認藍點,則當用戶位置發生更改時,它會在地圖中更新。
我只想知道這是否可以用我們自己的自定義視圖來完成。
是的,您可以爲用戶的位置提供自定義視圖。
不幸的是,它比實際應用更難實現,因爲即使documentation for the viewForAnnotation delegate method聲稱如果註釋類是MKUserLocation
,您可以提供自己的視圖,那麼自定義視圖不會隨用戶的位置而繼續移動。實際上,當自定義視圖返回MKUserLocation
時,地圖視圖會完全更新用戶位置(地圖視圖的didUpdateUserLocation
委託方法不再觸發)。我相信這是一個錯誤。
一種解決方法是使用CLLocationManager
和一個自定義的註釋......
確保showsUserLocation
是NO
或取消選中在地圖視圖。
聲明爲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
委託方法,你會返回一個自定義的註釋圖如果註釋是您的自定義用戶位置註釋。
面臨同樣的問題,也許我們可以提出一個bug到蘋果 – darshansonde 2012-07-12 07:16:18
謝謝安娜,它的工作現在。即使我懷疑mapview中有一個錯誤,它在我們設置時沒有顯示用戶位置的自定義註釋視圖。 – nkd 2012-07-12 10:28:37
但我在這裏遇到的另一個問題是,一旦開始位置更新,我就會將調用返回給locationManager:didUpdateToLocation:fromLocation方法,我在其中創建註釋並將其添加到地圖,但地圖甚至沒有顯示我的自定義視圖儘管我正在返回自定義視圖。如果我關閉位置和位置,它就會起作用。這裏有什麼問題嗎? – nkd 2012-07-12 15:03:50