Ios5 设置MKUserTrackingModeFollowWithHeading

Ios5 设置MKUserTrackingModeFollowWithHeading,ios5,Ios5,我尝试在viewDidLoad方法中设置用户跟踪模式(并且在ViewWillDisplay中)。如果将其设置为MKUserTrackingModeFollowWithHeading(值为2),则不会生效。实际上,在将其值设置为2之后,如果我打印它的值,它就是1,为什么?我从未在任何编程经验中见过这样的事情 下面是我如何设置它的: [self.mapView setUserTrackingMode: MKUserTrackingModeFollowWithHeading

我尝试在viewDidLoad方法中设置用户跟踪模式(并且在ViewWillDisplay中)。如果将其设置为MKUserTrackingModeFollowWithHeading(值为2),则不会生效。实际上,在将其值设置为2之后,如果我打印它的值,它就是1,为什么?我从未在任何编程经验中见过这样的事情

下面是我如何设置它的:

[self.mapView setUserTrackingMode: MKUserTrackingModeFollowWithHeading 
                         animated: YES];
如果我在ViewWillAspect方法中执行相同的操作,效果是相同的。但是,第二次显示此视图时,该设置将生效。(我有一个选项卡viewcontroller,我将视图切换到另一个,然后切换回)

我认为它不起作用的方式有两种:(1)设置后立即打印其值(2)在地图视图中,标题不显示


发生了什么事?

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

我实现的解决方案是使用自定义的CLLocationManager检索标题,然后适当地旋转地图。有关使用此方法的帮助,请参见此答案:


还请注意,iOS模拟器目前不允许航向模拟。

可能是调用它太早了吗?尝试将setUserTrackingMode调用放在ViewDidAspect方法中,并确保没有在Interface Builder(Xcode的gui部分)中设置其他值。

我也遇到了这个问题。尽管我已经将showsUserLocation设置为YES,并将userTrackingMode设置为MKUserTrackingModeFollowWithHeading in-viewDidLoad,但标题仍然只是偶尔显示一次。
在nib中选中“显示用户位置”以进行良好测量,并将setUserTrackingMode:to-viewDidDisplay移动到后,它开始一致地显示标题。我要说的是,对于mapView调用-viewDidLoad太早了。但不知道为什么

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

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

因此,出现此错误的原因是:

UIMapView is not loaded yet in the viewDidLoad.
将代码放在methode mapViewDidFinishLoadingMap中也不是一个好主意,因为没有说将调用该方法。缓存分幅时不会调用该方法(例如,如果应用程序中的另一个mapview位于缩放到相同分幅的不同位置)

因此,将其放在mapViewDidFinishLoadingMap中也不是一个好主意

最终解决方案:

创建一个私有布尔值,并在viewDidLoad中将其设置为false

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

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

有趣的是,MKMapView委托类中的mapView:didUpdateUserLocation:方法从未被调用过一次,尽管在加载映射时我确实看到了当前位置(蓝点)。我确保“showsUserLocation”属性设置为YES。在设置mapview的委托(作为self)之后,现在调用mapview:didUpdateUserLocation。但是,当我触摸或缩放屏幕时,位置标题消失,地图旋转回正常状态。@user1020156我相信当你在地图上平移时,让地图旋转回正常状态是正常的行为(尽管缩放不会导致地图旋转回正常状态)。这是默认的“地图”应用程序在iOS上显示的行为。此外,您还可以通过mapView委托上的mapView:didChangeUserTrackingMode:animated更改跟踪模式。请记住:如果缓存了平铺,则永远不会调用此方法。