设置MKUserTrackingModeFollowWithHeading

时间:2011-10-29 21:15:36

标签: ios5

我尝试在viewDidLoad方法(以及viewWillAppear)中设置用户跟踪模式。如果我将其设置为MKUserTrackingModeFollowWithHeading(值为2),则它不会生效。实际上,在将其值设置为2之后,如果我将其打印为值,则为1,为什么?我从未在任何编程经历中看到过这样的东西!

以下是我如何设置它:

[self.mapView setUserTrackingMode: MKUserTrackingModeFollowWithHeading 
                         animated: YES];

如果我在viewWillAppear方法中执行相同操作,效果是相同的。但是,第二次显示此视图时,该设置将生效。 (我有一个制表视图控制器,我将视图切换到另一个,然后切换回来)。

我看到它没有生效的方法有两个措施:(1)在地图视图中设置它(2)后立即打印其值,不显示标题。

发生了什么事?

5 个答案:

答案 0 :(得分:14)

我知道这是一个非常古老的帖子,但是为了防止其他人在那里寻找解决方案,原因是因为你需要在地图加载后设置userTrackingMode。因此,将您的类设置为委托,然后添加此委托方法:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
    mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
}

答案 1 :(得分:3)

我也有同样的问题。在地图标题中找不到任何关于它无法正常工作的信息,或者为此工作。

我实现的解决方案是使用自定义CLLocationManager来检索标题,然后适当地旋转地图。有关使用此方法的一些帮助,请参阅此答案:Rotate MapView using Compass orientation

另请注意,iOS模拟器目前不允许进行标题模拟。

答案 2 :(得分:0)

可能是因为它被称为太早了吗?尝试将setUserTrackingMode调用放在viewDidAppear方法中,并确保在Interface Builder中没有设置不同的值(Xcode的gui部分)

答案 3 :(得分:0)

我也有这个问题。即使我已经将showsUserLocation设置为YES而将userTrackingMode设置为-viewDidLoad中的MKUserTrackingModeFollowWithHead,标题仍然只是偶尔显示一次。 检查笔尖中的“显示用户位置”以获得良好的测量值,以及将setUserTrackingMode:移动到-viewDidAppear后,它始终显示标题。我会说-viewDidLoad对于mapView来说太早了。不过不知道为什么。

答案 4 :(得分:0)

因此出现此错误的原因:

UIMapView is not loaded yet in the viewDidLoad.

将代码放在方法mapViewDidFinishLoadingMap中也不是一个好主意,因为不会说该方法会被调用。缓存切片时不会调用此方法(例如,如果您在另一个地方缩放到相同切片的app中有另一个地图视图)。

所以将它放在mapViewDidFinishLoadingMap中并不是一个好主意。

最终解决方案:

创建一个私有布尔值并在viewDidLoad

中将其设置为false
BOOL _didFollowUserAlready;

将mapview委托设置为self并添加此方法:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    if(!_didFollowUserAlready)
    {
        _didFollowUserAlready = TRUE;
        [mapView setUserTrackingMode:MKUserTrackingModeFollow animated:TRUE];
    }
}