我尝试在viewDidLoad方法(以及viewWillAppear)中设置用户跟踪模式。如果我将其设置为MKUserTrackingModeFollowWithHeading(值为2),则它不会生效。实际上,在将其值设置为2之后,如果我将其打印为值,则为1,为什么?我从未在任何编程经历中看到过这样的东西!
以下是我如何设置它:
[self.mapView setUserTrackingMode: MKUserTrackingModeFollowWithHeading
animated: YES];
如果我在viewWillAppear方法中执行相同操作,效果是相同的。但是,第二次显示此视图时,该设置将生效。 (我有一个制表视图控制器,我将视图切换到另一个,然后切换回来)。
我看到它没有生效的方法有两个措施:(1)在地图视图中设置它(2)后立即打印其值,不显示标题。
发生了什么事?
答案 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
中将其设置为falseBOOL _didFollowUserAlready;
将mapview委托设置为self并添加此方法:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
if(!_didFollowUserAlready)
{
_didFollowUserAlready = TRUE;
[mapView setUserTrackingMode:MKUserTrackingModeFollow animated:TRUE];
}
}