我正在使用MKUserTrackingModeNone,MKUserTrackingModeFollow,MKUserTrackingModeFollowWithHeading在三种不同的map定位模式之间切换,这是可行的。
然而,当从MKUserTrackingModeFollowWithHeading切换到MKUserTrackingModeNone时,我遇到了地图的方向没有重置为北向方向(地图上的北方向在屏幕顶部)的问题。
在iphone/ipad的内置地图应用程序上,流程如下:
当你启动应用程序时,它处于MKUserTrackingModeNone模式,并且是北向当你切换方向模式时,它会变成MKUserTrackingModeFollow,方向仍然是北。
再次切换时,它将更改为MKUserTrackingModeFollowWithHeading,并且贴图将根据您面对/指向iPhone的方向进行旋转。
当您再次切换方向时,它将返回到MKUserTrackingModeNone,并且地图将很好地旋转回北向。
我希望我的应用程序在切换模式时以相同的方式处理方向,但当我像上面的步骤4那样做并从MKUserTrackingModeFollowWithHeading切换到MKUserTrackingModeNone时,方向保持不变,就像进行方向切换之前一样,而不是旋转回北方向。
我正在使用放置在工具栏中的标准MKUserTrackingBarButtonItem控件进行方向切换。
有人能帮我解决这个问题吗?
发布于 2013-05-16 07:46:11
我在运行iOS 6.1.4的iPhone 5上也遇到了这个问题。我使用了这个简单但丑陋的快速修复来强制地图视图旋转回北上:
-(void)someMethod
{
// Currently in MKUserTrackingModeFollowWithHeading mode
// Set tracking mode back to MKUserTrackingModeFollow
[_mapView setUserTrackingMode:MKUserTrackingModeFollow];
// After a short delay, set mode to MKUserTrackingModeNone
[self performSelector:@selector(mapViewTrackingModeNone)
withObject:nil
afterDelay:0.2];
}
- (void)mapViewTrackingModeNone
{
[_mapView setUserTrackingMode:MKUserTrackingModeNone];
// Bang! The map rotates back to North-Up
}可能有一种更好的方法可以做到这一点,但我还没有找到。
发布于 2013-04-20 03:01:54
在iOS 5中,它会自动向北切换,但在iOS 6中不会。您可以在bugreport.apple.com上提交增强请求。
您可以实现委托回调函数,并在委托回调中应用旋转...
- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated
{
if (mode == MKUserTrackingModeNone)
[self rotateTheMapView];
}
- (void)rotateTheMapView {
// See https://stackoverflow.com/q/1245461/1445366
}(有关旋转说明和代码,请参阅Rotate MapView using Compass orientation。)
问题是,苹果不会使用其内部逻辑来显示准确的当前旋转,所以iOS提供给你的当前方向的任何计算可能会略有偏差,导致当你完成时,你的地图会稍微偏北。
发布于 2013-04-22 02:57:25
您应该组合一个小的测试应用程序,其中只有一个地图视图和一个MKUserTrackingBarButtonItem,并将两者链接在一起。如果它应该按照您所描述的那样做,并且不需要一行代码。所有的连接都可以在IB中完成。一旦你看到它在工作,你就可以返回到你的代码并重复这个过程。
https://stackoverflow.com/questions/15984500
复制相似问题