2016-08-02 31 views
0

Ich habe MKMapView, die von unten durch eine andere Ansicht abgedeckt ist. Nehmen wir an, die Höhe der Karte ist 250, aber von unten ist 100 von der anderen Ansicht abgedeckt.Center MKMapView wenn Teil der Karte abgedeckt ist

Wenn ich jetzt die Karte mit setRegion zentriere, wird die Karte zentriert, als ob die ganze Karte sichtbar wäre, aber ich muss sie auf die Region zentrieren, die wirklich sichtbar ist.

Sie können sagen, dann senken Sie die Höhe der Karte auf 150, so wird es nicht abgedeckt werden, aber ich muss es durch das Design abgedeckt haben, weil die abdeckende Ansicht nicht vollständig Breite zu Grenzen hat (es gibt Lücke von Seiten), so dass die Karte um die Coveransicht sichtbar ist.

Also, wie die Karte für die Höhe der realen sichtbaren Region zu zentrieren?

Jetzt bin ich mit dieser:

CLLocationCoordinate2D loc = CLLocationCoordinate2DMake(lat, long); 
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (loc, 200, 200); 
[_map setRegion:region animated:YES]; 
+0

Warum verwenden Sie nicht diesen Code '[_map setCenterCoordinate: loc animiert: YES]'? –

+0

Ich werde es versuchen, aber etwas sagt mir, das löst das Problem nicht. Aber werde es versuchen, thx. – luky

+0

hast du es versucht? @luky –

Antwort

1

Versuchen Sie es mit:

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect] 
        animated:YES]; 

Oder, wenn Sie auf dem Bildschirm verschiebt ein bisschen weiter justieren möchten, können Sie verwenden:

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect] 
        edgePadding:UIEdgeInsetsMake(50, 50, 50, 50) 
        animated:YES]; 
+0

Hallo. Dies funktionierte wie erwartet [_map setVisibleMapRect: [_ map visibleMapRect] edgePadding: UIEdgeInsetsMake (0, 0, heightOfMapCover, 0) animiert: YES]; Das Problem ist nur, dass verschiedene Werte der unteren Einfügefüllung unterschiedliche Kartenzoome erzwingen. Wie 100 ist ein Zoom, 120 andere Zoom usw. Ziemlich merkwürdig Verhalten von diesem. Ansonsten verschiebt es wirklich die Karte um die angegebene Nummer, was ich brauche. Danke – luky

+0

@luky, das Thema klingt ziemlich seltsam für mich. Ich glaube, der Zoom wird von 'MKMapRect' gesteuert, nicht von' UIEdgeInsets'. Sie können meinen ursprünglichen Beitrag hier sehen: http://stackoverflow.com/a/35614774/5165668. Im Moment bin ich mir nicht sicher, ob das dein Käfer ist oder der Käfer von Apple. – OlDor

0

Nicht sicher, ob Sie jemals herausgefunden haben, aber hier ist eine Lösung in swift. Sollte einfach für Obj-C

let pointYouWantCentered = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
pointYouWantCentered.latitude -= (mapView.region.span.latitudeDelta * 0.25) 
mapView.setCenter(pointYouWantCentered, animated: true) 

Dies wird zentriert den Punkt in der oberen Hälfte des Bildschirms anzupassen. Solange Sie den Teil des Bildschirms kennen, den Sie in der Ansicht von unten verwenden, können Sie die Mitte der Karte so einstellen, dass sie sich auf dem gewünschten Punkt befindet. Zum Beispiel zentriert dies den Punkt in der oberen Hälfte des Bildschirms, vorausgesetzt, Sie haben eine Ansicht, die die untere Hälfte einnimmt. Wenn Ihre Ansicht von unten 1/3 des Bodens einnimmt und Sie auf die oberen 2/3 der Ansicht zentrieren möchten, würden Sie Folgendes tun.

let pointYouWantCentered = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
pointYouWantCentered.latitude -= (mapView.region.span.latitudeDelta * (1.0/6.0)) 
mapView.setCenter(pointYouWantCentered, animated: true) 

Hoffe, das hilft.