我正在使用map
,MKUserTrackingModeNone
,MKUserTrackingModeFollow
在三种不同的MKUserTrackingModeFollowWithHeading
定位模式之间切换,这是有效的。
但是,当从MKUserTrackingModeFollowWithHeading
切换到MKUserTrackingModeNone
时,我的地图方向没有重置为朝北方向(地图北侧位于屏幕顶部)。 / p>
在iphone/ipad
上的内置地图应用中,流程如下:
启动应用程序时,它处于模式MKUserTrackingModeNone
并且面向北方
当你切换方向模式时,它会变为MKUserTrackingModeFollow
,方向仍然是北方。
再次切换时,它会变为MKUserTrackingModeFollowWithHeading
,地图会根据您面向/指向iPhone的方向旋转。
再次切换方向时,它会返回MKUserTrackingModeNone
,地图会很好地旋转回北方。
我希望我的应用在切换模式时的方向相同,但是当我执行上面的步骤4并从MKUserTrackingModeFollowWithHeading
切换到MKUserTrackingModeNone
时,方向保持为它就在制作方向开关之前,而不是向北旋转。
我正在制作方向开关,并在工具栏中放置标准MKUserTrackingBarButtonItem
控件。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
我也在运行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
}
这可能有更好的方法,但我还没有找到它。
答案 1 :(得分:0)
在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。)
问题在于Apple没有使用其内部逻辑公开当前的精确旋转,因此iOS提供给您的当前标题的任何计算都可能稍微偏离,导致您的地图在您'时稍微偏离北方重做。
答案 2 :(得分:0)
你应该把一个小的测试应用程序放在一起,它只有一个mapview和一个MKUserTrackingBarButtonItem并将两者连接在一起。如果它应该如您所描述的那样,并且不需要一行代码。所有连接都可以在IB中完成。一旦看到它工作,您就可以返回代码并重复此过程。