我有一个实现MKMapView的应用程序,我想跟踪并跟踪用户位置,我设法做到这一点,唯一的问题是即使将跟踪设置为.none
地图有时返回用户位置。
首先,这里有一个GIF正在发生(上传到imgur因为文件太大而无法使用SO):http://i.imgur.com/2FoQCoi.gifv
右下方的图标表示地图是否跟踪用户位置,GIF上的图标是灰色的,因为它应该关闭。
按钮的代码是:
var isFollowing: Bool {
get {
return chkFollow.checked
}
set {
chkFollow.checked = newValue
if newValue {
mapView.setUserTrackingMode(.follow, animated: true)
print("did set to follow")
}
else {
mapView.setUserTrackingMode(.none, animated: true)
print("did set to none")
}
}
}
我还将mapView(_, regionWillChangeAnimated)
方法设置为以下内容:
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
isFollowing = false
}
和
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
mapView.userTrackingMode = .none
}
两者都没有正常工作。
当我单击按钮时,print语句正常工作,并在控制台上正确打印“did set to none”,因此我知道正在调用该方法,只是出于某种原因,它仍然跟在用户之后。
如果有任何其他信息有帮助,我会很乐意发送它。 chkFollow
是一个自定义复选框控件,我不认为它的代码与此相关。
提前致谢!
对不起每个人,当我在示例项目中重新创建它时,我得到了它。
问题是,我希望应用跟踪用户在启动时的位置,因此我将UserTrackingMode
设置为.follow
内的mapViewDidFinishRenderingMap
。因此,当地图移动到足以重新渲染被调用的所有内容时,地图开始再次跟踪用户。
要解决这个问题,我添加了一个bool变量(isFirstLoad
),并且只在用户首次加载应用时才设置UserTrackingMode
。感谢您的评论,很抱歉花时间来处理这个问题:)