13

数行のコードと と の 2 つのコンポーネントを含むテスト プロジェクトを作成しましMKMapViewUIButtonmapViewオプションにチェックを入れました - Shows user location。また、ボタンのアクションを定義し、マップをユーザーの場所にズームします。

コントローラーからのコードは次のとおりです。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
    self.mapView.delegate = self;
}

- (IBAction)changeRegion:(id)sender {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}

とても単純明快ですね。しかし、ボタンをタップすると、奇妙な動作が見られます。マップ ビューが指定された領域にズームしてから、元のズームに戻ります。どうしたの?ズームを維持しながら同時にユーザーの位置を追跡するにはどうすればよいですか?

MKUserTrackingModeFollow 追跡モードでも同様の動作に気付きました。

PS主にiOS7の問題であることを忘れていました

4

1 に答える 1

12

アップルのドキュメントから:

追跡モードを MKUserTrackingModeFollow または MKUserTrackingModeFollowWithHeading に設定すると、マップ ビューはその場所をマップの中心にして、ユーザーの場所の追跡を開始します。マップがズームアウトされている場合、マップ ビューはユーザーの位置に自動的にズームインし、現在の可視領域を効果的に変更します。

地域の調整とユーザーの追跡の両方が必要な場合は、場所の更新を確認し、それに応じてズームを調整することをお勧めします。

例えば:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}

編集

地域を設定する代わりに、中心だけを設定してみてください。

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    [self.mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
}

ボタンアクションでズームを設定し、同じ中心を維持します。

- (IBAction)changeRegion:(id)sender {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.centerCoordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}

そして非常に重要です: ユーザーを追跡するように mapView を設定しないでください。自分で追跡しているため、追跡ユーザーを無効にします。デフォルトは だと思いますMKUserTrackingModeNone

于 2013-10-22T12:52:13.780 に答える