3

これは私の小さな方法で、ロケーションマネージャーの現在の場所を取得し、マップをその少し上にフォーカスして、マップの上部に追加した他のサブビュー用のスペースを確保します。スパンの緯度/経度のデルタが大きくなりすぎると(1.0を超える)、リージョンが設定されるたびに、実際にマップに触れなくても、マップが完全にズームアウトされるまで、スパンはどんどん大きくなります。マップビューのスパンを再利用することと関係があると思いますが、何が起こっているのか正確にはわかりません。

- (void)setRegion {
    CLLocationCoordinate2D coord = locationManager.location.coordinate;

    MKCoordinateSpan span = mapView.region.span;

    coord.latitude += 0.002 * (span.latitudeDelta / 0.012523);

    MKCoordinateRegion region = MKCoordinateRegionMake(coord, span);
    [mapViewGlobal setRegion:region animated:animated];
}
4

1 に答える 1

4

Appleのドキュメントから「ズームレベルを変更せずに中心座標を変更したい場合は、代わりにsetCenterCoordinate:animated:を使用してください。」MKMapView

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated

MKMapViewは、ターゲット領域全体を表示しながら、再定義されたズームレベルにうまく適合する新しい領域を選択します。北に移動するたびに、スパンが変化し、制御不能になります。

また、緯度をどれだけ変更するかを決める方法は少し奇妙です。トリックを実行するときに複数を実行して分割することを除けば、特定の緯度(赤道から引き伸ばされる)と特定のズームレベルでのみ機能します。マップをスクロールする必要があるピクセル数(おそらくサブビューの高さの半分)を計算してから、この関数を使用してマップを中央に配置する必要がある場所を計算することをお勧めします。

- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view

別の方法は、サブビューをMKMapViewの外に配置することですが、それはあなたの美学に影響を与えます。

于 2012-08-22T09:25:15.417 に答える