即使userTrackingMode设置为.none,MKMapView也会跟随用户

时间:2017-08-31 02:11:47

标签: ios swift swift3 mapkit

我有一个实现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。感谢您的评论,很抱歉花时间来处理这个问题:)

0 个答案:

没有答案