MKMapViewにMKMapRouteを表示する必要があり、マップの特定の領域 (中央ではなく上部領域) に表示する必要があります。約 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];
結果は次のスクリーンショットに表示されます。
(0,0,0,0)
ただし、前のスニペットの 4 行目を次のように変更して、エッジ インセットを設定した場合:
MKMapRect fittedRect = [self.mapView mapRectThatFits:[line boundingMapRect]
edgePadding:UIEdgeInsetsMake( 100, 0, 0, 0)];
結果はこれです:
はっきりとわかるように、オフセットは上から 50 (100 ではなく) ポイント変化しています。MKMapRegionのスパン緯度と経度デルタで遊んだり、デバイス画面を変更したりすると、事態はさらに奇妙になるようです。
今、私の目的は、 「上から64ポイント、高さ80ポイント、幅320ポイント」のフレームにそのルートを描画するようにmapViewに指示することです。これを行う簡単な方法を見つけていませんそして、私は何かが欠けているのではないかと心配しています。コンテンツのサイズが異なる可能性があるため、地域の緯度を変更してプレイしたくありません (表示するルートが小さいか大きい可能性があります)。これを行う簡単な方法は何ですか? インセットが正しく計算されないのはなぜですか?