3

MKMapViewMKMapRouteを表示する必要があり、マップの特定の領域 (中央ではなく上部領域) に表示する必要があります。約 80 ポイントの高さの「フレーム」に配置する必要があります。

MKMapViewのメソッドを使用することでこれを達成できると思いました

- (MKMapRect)mapRectThatFits:(MKMapRect)mapRect edgePadding:(UIEdgeInsets)insets

しかし、私はいくつかの奇妙なことに直面しています。正確には、このコード スニペットを使用すると、次のようになります。

//obj is the returned mkroute object.
MKRoute *rout = obj;        
MKPolyline *line = [rout polyline];
MKMapRect boundingMapRect = [line boundingMapRect];
MKMapRect fittedRect = [self.mapView mapRectThatFits:[line boundingMapRect] 
                               edgePadding:UIEdgeInsetsMake( 100, 0, 0, 0)];
MKCoordinateRegion r = MKCoordinateRegionForMapRect(fittedRect);
[self.mapView setRegion: r animated:YES];

結果は次のスクリーンショットに表示されます。

上部に 100 ポイントのインセットを持つ MKMapRect

(0,0,0,0)ただし、前のスニペットの 4 行目を次のように変更して、エッジ インセットを設定した場合:

MKMapRect fittedRect = [self.mapView mapRectThatFits:[line boundingMapRect]  
                               edgePadding:UIEdgeInsetsMake( 100, 0, 0, 0)];

結果はこれです:

上部インセットが 0 ポイントの MKMapRect

はっきりとわかるように、オフセットは上から 50 (100 ではなく) ポイント変化しています。MKMapRegionのスパン緯度と経度デルタで遊んだり、デバイス画面を変更したりすると、事態はさらに奇妙になるようです。

今、私の目的は、 「上から64ポイント、高さ80ポイント、幅320ポイント」のフレームにそのルートを描画するようにmapViewに指示することです。これを行う簡単な方法を見つけていませんそして、私は何かが欠けているのではないかと心配しています。コンテンツのサイズが異なる可能性があるため、地域の緯度を変更してプレイしたくありません (表示するルートが小さいか大きい可能性があります)。これを行う簡単な方法は何ですか? インセットが正しく計算されないのはなぜですか?

4

1 に答える 1