Google Maps iOS SDK verschieben "Mein Standort" - Taste in der unteren linken Ecke
Google Maps für iOS-SDK, die "Mein Standort" - button ist standardmäßig platziert in der unteren rechten Ecke:
Ich würde gerne, um es in der unteren linken Ecke (ja, ich weiß, ich muss vorsichtig sein, nicht zu verschleiern, die "Google" - logo gibt). Ich glaube nicht, dass die SDK hat eine "offizielle" Weg, dies zu tun, basiert aber auf diese Antwort, ich habe herausgefunden, wie man den "Mein Standort" - Taste, Untersicht, so dass ich position.
Das Teil, das hat mich verwirrt, ist, welche Werte ich haben müsste, dass der Meine Position anzeigen des Rahmens und/oder Grenzen, um es zu bekommen, wo ich will. Für den Anfang, die "Mein Standort" - Taste, wie es derzeit steht, hat frame.origin.x
= -74
und frame.origin.y
= -54
. Dies ist das erste mal, dass ich gesehen habe negative Koordinaten für eine frame.origin.x
oder eine frame.origin.y
und ich bin mir auch nicht sicher, wie Sie iOS-Griffe negativen Koordinaten. Mein Erster Gedanke war, dass z.B. frame.origin.x = -74
entspricht [view superview].frame.size.width - 74
, d.h. negativer Wert abgezogen, der die Breite und Höhe der superview. Aber dann sah ich die Breite und Höhe des superview und Sie sind beide 0.0
. Hier ist mein code, welche Ausgaben Sie einige Informationen über die Karte und meine Position button-frames und Grenzen:
- (void)loadView {
GMSCameraPosition *cam = [GMSCameraPosition cameraWithLatitude:jcuTownsvilleCenterCampusLat longitude:jcuTownsvilleCenterCampusLon zoom:17];
self.campusMap = [GMSMapView mapWithFrame:CGRectZero camera:cam];
self.campusMap.myLocationEnabled = YES;
self.campusMap.settings.myLocationButton = YES;
self.view = self.campusMap;
for (UIView *view in self.campusMap.subviews) {
NSLog(@"view.description: %@",view.description);
if ([view isKindOfClass:[UIButton class]]) {
//these four values in the conditional below are just what happen to
//be the values corresponding to the "my location button" in Google Maps
//for iOS SDK version 1.3.0.3430. They might change over time, so this
//code is somewhat fragile.
if (view.frame.size.width == 76 && view.frame.size.height == 54 &&
view.frame.origin.x == -76 && view.frame.origin.y == -54) {
NSLog(@"we may have found the 'my location' button");
NSLog(@"self.campusMap coord stats:");
NSLog(@"bounds.origin.x: %f", self.campusMap.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", self.campusMap.bounds.origin.y);
NSLog(@"bounds.size.width: %f", self.campusMap.bounds.size.width);
NSLog(@"bounds.size.height: %f", self.campusMap.bounds.size.height);
NSLog(@"frame.origin.x: %f", self.campusMap.frame.origin.x);
NSLog(@"frame.origin.y: %f", self.campusMap.frame.origin.y);
NSLog(@"frame.size.width: %f", self.campusMap.frame.size.width);
NSLog(@"frame.size.height: %f", self.campusMap.frame.size.height);
NSLog(@"view coord stats:");
NSLog(@"bounds.origin.x: %f", view.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", view.bounds.origin.y);
NSLog(@"bounds.size.width: %f", view.bounds.size.width);
NSLog(@"bounds.size.height: %f", view.bounds.size.height);
NSLog(@"frame.origin.x: %f", view.frame.origin.x);
NSLog(@"frame.origin.y: %f", view.frame.origin.y);
NSLog(@"frame.size.width: %f", view.frame.size.width);
NSLog(@"frame.size.height: %f", view.frame.size.height);
}
}
}
}
Und hier ist die Ausgabe:
self.campusMap coord stats:
bounds.origin.x: 0.000000
bounds.origin.y: 0.000000
bounds.size.width: 0.000000
bounds.size.height: 0.000000
frame.origin.x: 0.000000
frame.origin.y: 0.000000
frame.size.width: 0.000000
frame.size.height: 0.000000
view coord stats:
bounds.origin.x: 0.000000
bounds.origin.y: 0.000000
bounds.size.width: 76.000000
bounds.size.height: 54.000000
frame.origin.x: -76.000000
frame.origin.y: -54.000000
frame.size.width: 76.000000
frame.size.height: 54.000000
Ich versuchte, so einen einfachen test, um die position der "Mein Standort" - button in der top linken Ecke mit:
CGRect frame = view.frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size.width = 76;
frame.size.height = 54;
[view setFrame:frame];
aber dann die "Mein Standort" - button gar nicht erst erscheint.
Habe ich auch schon versucht kleinere änderungen an der vorhandenen Werte (z.B. änderung frame.origin.x
aus -76.0
zu -66.0
und sehen den Unterschied in der position sind, also ich zumindest bin zuversichtlich, ich bin ändern der position von der rechten Ansicht. Ich verstehe immer noch nicht ich), wie negative Koordinaten arbeiten, und ii) wie man richtig positionieren Sie die Ansicht in diesem speziellen Szenario obwohl. Nach dem Lesen der Antworten zu diese Frage ich dachte, ich hatte einen vernünftigen greifen Sie auf anzeigen der frames und Grenzen, aber da habe ich noch nicht bekommen, dies funktioniert aber anscheinend nicht.
- In
loadView
Sie haben gerade zugewiesen der map-Ansicht mit einer Größe von null (die bewirkt, dass es verkleinert, um den Bildschirm zu füllen später). Es könnte sich lohnen zu prüfen, was alle Werte werden zu einem späteren Zeitpunkt - z.B. inviewDidLoad
oderviewDidAppear
oder sowas? - Es könnte sich auch lohnen, die überprüfung der Werte die Schaltfläche
transform
- Eigenschaft, um zu sehen, ob die Transformation ist etwas ungewöhnlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg, um dieses Problem zu lösen ist, um den Rahmen zu verändern und autoresizing Maske die Taste gleich nach dem map-Ansicht erstellt wird.
BEARBEITEN: Sorry, ich legte die Schaltfläche in der oberen rechten Ecke. Meine aktualisierten code, um es in der unteren linken Ecke.
Hinweis: derzeit gibt es keine API von Google, um die Standort-Taste. Die erste Zeile funktioniert möglicherweise nicht in zukünftigen Versionen des SDK.
Sollten Sie auch erstellen Sie eine feature-Anfrage hier.
Weitere option, um die Schaltfläche zu erstellen, sich selbst und fügen Sie es als eine Untersicht auf die Karte.
Die button-handler-code ist ziemlich einfach:
frame.origin.x = 0
und es sitzt noch ein wenig den Weg aus der Ecke). EinstellungcontentEdgeInsets
,titleEdgeInsets
undimageEdgeInsets
zu0.0
auf dem UIButton scheint nicht ganz tun es auch nicht.[[mapView_ subviews] lastObject]
. Ich verwende jetzt...Können Sie die Polsterung der GMSMapView.
SWIFT 3
viewMap.padding = UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 0)
swift xcode 3 8
Juli 2015, dies ist ein Weg, es zu tun: