我已經閱讀了無數帖子在這裏堆棧和蘋果的文檔,並找不到任何東西來解決這個問題。放置一個藍點(用戶位置)只使用CLLocationManager
問題是如果您設置mapView.showsUserLocation = YES,那麼MapKit將開始將自己的GPS查詢發送到您的手機。
從蘋果文檔:
此屬性設置爲YES導致 使用核心位置 框架查找當前 位置的地圖視圖。只要此屬性爲 YES,地圖視圖就會繼續跟蹤 用戶的位置並定期更新它 。
如果你還想使用CLLocationManager,那麼當你打電話給[mylocationmanager startUpdatingLocation],那麼你正在手機上進行第二次GPS查詢。
現在你有2個獨立的進程要求GPS位置。
在模擬器上不是問題,但如果您在真實手機上試用它,則需要非常長的時間來獲取GPS位置。它也不一致10秒 - 1分鐘,而如果關閉mapView.showsUserLocation,則需要持續2-3秒。
一般來說,使用兩者似乎是一個非常糟糕的做法。
爲了靈活性和控制,我寧願使用CLLocationManager,但是如果你沒有設置mapView.showsUserLocation = YES,那麼你不會得到藍點!
我想平時覆蓋批註的方法:例如:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
if ([annotation isKindOfClass:MKUserLocation.class]) {
//it's the built-in user location annotation, return nil to get default blue dot...
return nil;
}
//handle your custom annotations...
}
但它不工作,很可能是因爲從來就沒有呼叫實際上把用戶標註在地圖上。
那麼有沒有人有解決方案只使用CLLocationManager將用戶的位置放置在地圖上?
是的,把我自己的批註會的工作,但它不會有相同的外觀作爲內置的用戶位置圖標(即無脈動動畫,內置分辨率縮放等)。也許有人有默認的PNG圖標,我可以使用它? – Totomobile 2011-02-24 21:42:14
那麼您可以自定義用於註釋的圖像,以便您可以將藍點返回。分辨率縮放也自動內置在所有註釋中。脈動可能更困難。如果你有iOS開發者賬號,你也可以在蘋果開發論壇發佈你的問題,那裏也有真正的蘋果工程師,他們也可以幫助你。最後但並非最不重要的,我會考慮提交bug報告/功能請求,因爲這可能不是最佳/預期的行爲。 – Robin 2011-02-24 22:07:05
使用自定義註釋的問題是您沒有得到跟蹤或準確性環。我現在只需在CLLocationManager完成它的任務後打開用戶位置,然後在需要使用CLLocationManager時將其關閉,即可解決問題。感謝您的建議,也許我們可以在真正的解決方案出來時更新此主題:) – Totomobile 2011-02-25 00:36:07