2015-11-09 32 views
0

我採取簡單的導航和顯示用戶的位置,我使用自定義MKAnnotationView自定義用戶位置標記在的MKMapView

let reuseId = "userLocationPin" 
userLocationViewAnnotation = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView 
if userLocationViewAnnotation == nil { 

    userLocationViewAnnotation = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
    userLocationViewAnnotation!.canShowCallout = true 
    userLocationViewAnnotation!.centerOffset = CGPoint(x: 0.9, y: -2) 
    userLocationViewAnnotation!.image = UIImage(named: "User_location_red_moving_x1") 

} 

而這種代碼是工作的罰款。接下來我需要添加精確度圈。我被MKCircle將其添加覆蓋:

userLocationCircle = MKCircle(centerCoordinate: location.coordinate, radius: location.horizontalAccuracy) 
map.addOverlay(userLocationCircle!) 

的問題是,用戶的位置由MKMap內部更新更頻繁,並與動畫,但圈之後用戶位置的變化更新(在我的代碼),所以它從一點跳到另一點。

是否可以將此圓圈添加到MKAnnotationView,或者您是否有其他想法?

+0

嘿米歇爾,你有沒有找到一個妥善解決你的問題?我目前面臨同樣的問題! – Georg

回答

1

方案1(我之前所做的那樣)

不要設置MKMapView.showsUserLocation爲true。這意味着你不能再使用delgate的mapView:didUpdateUserLocation:了。這意味着提取用戶的位置不太方便。你將不得不使用核心位置。 (周圍的教程噸) 然後,你必須相應地設置地圖的中心和跨度,但你自己。通過這樣做,您可以添加您想要的用戶位置的任何註釋。只需迴應mapView(_:viewForAnnotation:)並返回您想要顯示的視圖。

解決方案2:(我猜的作品,但我從來沒有嘗試過我自己)

只是MKMapView.showsUserLocation一起去像以前一樣,但到mapView(_:viewForAnnotation:)在任何情況下作出反應。調試它。在第一次調用此方法時,它將交給標準用戶註釋。 (我只是不知道它的類型/類名是否在我頭頂,這是第一個,這就是爲什麼我要求你調試它。) 只是不返回零,但返回你的觀點,你想要顯示。

這是值得一試。如果它工作的話,它比解決方案1的工作要少。

但是,解決方案1爲您提供了更多的靈活性和完全控制當前顯示在地圖中的世界部分。

+0

我不明白解決方案2,現在我在'mapView(_:viewForAnnotation:)'中返回我的自定義視圖,而不是零,並且此視圖沒有圓圈,這是一個簡單的點。此方法在開始時只執行一次,而不是每個位置/註釋更新。 –

+0

你會得到什麼結果? 正如我所說,我從來沒有嘗試過自己。這個想法剛剛出現。 –

+0

我正在描述結果在我的問題中,註釋更新頻繁而流暢,但圓圈從一個點跳到另一個點 –