6

mapを使用して 3 つの異なる方向モードを切り替えていますがMKUserTrackingModeNone、これは機能します。MKUserTrackingModeFollowMKUserTrackingModeFollowWithHeading

MKUserTrackingModeFollowWithHeadingただし、 からに切り替えると、マップの向きが北向き (マップの北が画面の上部) にリセットされないという問題がありますMKUserTrackingModeNone

の組み込みマップ アプリではiphone/ipad、フローは次のようになります。

アプリを起動すると、モードMKUserTrackingModeNoneで北向きです。向きモードを切り替えると、向きが に変わりますがMKUserTrackingModeFollow、向きは北向きのままです。

再度切り替えると に変わりMKUserTrackingModeFollowWithHeading、iPhoneを向けている方向に合わせて地図が回転します。

向きをもう一度切り替えると、 に戻りMKUserTrackingModeNone、地図がうまく回転して北向きに戻ります。

モードを切り替えるときの向きに関して、アプリが同じように動作するようにしたいのですが、上記の手順 4 のようにして からMKUserTrackingModeFollowWithHeadingに切り替えるMKUserTrackingModeNoneと、向きが に戻るのではなく、向きを切り替える直前の状態のままになります。北向き。

MKUserTrackingBarButtonItemツールバーに配置された標準コントロールで方向スイッチを作成しています。

誰でもこの問題を解決するのを手伝ってくれますか?

4

3 に答える 3

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
}

これを行うにはもっと良い方法があるかもしれませんが、まだ見つけていません。

于 2013-05-15T23:46:10.600 に答える
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
}

(回転の手順とコードについては、 「コンパスの向きを使用して MapView を回転する」を参照してください。)

問題は、Apple が内部ロジックを使用して正確な現在の回転を公開していないため、iOS によって提供された現在の方位からの計算がわずかにずれている可能性があることです。

于 2013-04-19T19:01:54.063 に答える