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:

Google Maps iOS SDK verschieben

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. in viewDidLoad oder viewDidAppear 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.
InformationsquelleAutor Bryce Thomas | 2013-06-02
Schreibe einen Kommentar