Google Maps iOS SDK déplacer “Ma position” bouton en bas à gauche
À l'aide de Google Maps pour iOS SDK, la "Ma position" bouton par défaut est placé dans le coin en bas à droite:
J'aimerais le placer dans le coin inférieur gauche (oui, je me rends compte que j'ai besoin d'être prudent de ne pas dissimuler le logo Google). Je ne crois pas que le kit de développement a un "officiel" de la façon de le faire, mais en se fondant sur cette réponse j'ai compris comment faire pour obtenir une prise de les Mon bouton d'Emplacement sous-vue afin que je puisse position.
La partie qui m'a confondu est ce que les valeurs que je devrais donner Mon Emplacement de la vue du cadre et/ou les limites de l'obtenir où je veux. Pour commencer, le bouton Ma position tel qu'il est actuellement a frame.origin.x
= -74
et frame.origin.y
= -54
. C'est la première fois que j'ai vu des coordonnées négatives pour un frame.origin.x
ou un frame.origin.y
et je ne suis même pas sûr de savoir comment iOS gère des coordonnées négatives. Ma première pensée a été que, par exemple, frame.origin.x = -74
est équivalent à [view superview].frame.size.width - 74
, c'est à dire la valeur est négative sont soustraites à partir de la largeur ou de la hauteur de la superview. Mais ensuite j'ai regardé la largeur et la hauteur de la superview et ils sont à la fois 0.0
. Voici mon code qui affiche des informations sur la carte et le bouton ma position des cadres et des limites:
- (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);
}
}
}
}
Et voici le résultat:
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
J'ai essayé comme un simple test de position "Ma position" bouton dans le haut à gauche avec:
CGRect frame = view.frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size.width = 76;
frame.size.height = 54;
[view setFrame:frame];
mais alors le bouton Ma position n'a pas pu montrer à tous.
J'ai aussi essayé de petites modifications aux valeurs existantes (par exemple, changement de frame.origin.x
de -76.0
à -66.0
et peut voir la différence de position, donc au moins je suis confiant, je suis à la modification de la position de la vue de droite. Je ne comprends toujours pas comment des coordonnées négatives de travail et ii) comment positionner correctement le point de vue dans ce scénario spécifique. Après avoir lu les réponses à cette question je pensais que j'avais une assez bonne compréhension à la vue des cadres et des limites, mais étant donné que je n'ai pas eu à travailler encore, apparemment pas.
loadView
vous avez seulement affecté la vue de la carte avec une taille de zéro (ce qui le fait être redimensionné de façon à remplir l'écran plus tard). Il pourrait être utile de vérifier que toutes les valeurs sont à un moment plus tard - par exemple dans les viewDidLoad
ou viewDidAppear
ou quelque chose comme ça?Il pourrait également être utile de vérifier les valeurs du bouton
transform
propriété, pour voir si la transformation est définie à quelque chose d'inhabituel.
OriginalL'auteur Bryce Thomas | 2013-06-02
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple de résoudre ce problème est de changer l'image et d'un redimensionnement automatique masque du bouton droit après l'affichage de la carte est créée.
MODIFIER: Désolé, j'ai placé le bouton dans le coin supérieur droit. Mis à jour mon code à placer dans le coin inférieur gauche.
Remarque: il n'existe actuellement aucune API de Google pour obtenir l'emplacement du bouton. La première ligne peut ne pas fonctionner dans les futures versions du SDK.
Vous devez aussi créer une demande de fonctionnalité ici.
Une autre option est de créer le bouton vous-même et de l'ajouter en tant que sous-vue à la carte.
Le gestionnaire de bouton code est assez facile:
frame.origin.x = 0
et il se trouve encore un peu de chemin à partir de l'angle). RéglagecontentEdgeInsets
,titleEdgeInsets
etimageEdgeInsets
à0.0
sur le UIButton ne semble pas tout à fait le faire.Mise à jour: dans la version 1.4.0.4450 de Google Maps iOS SDK de la myLocation bouton a changé sa position dans la hiérarchie vue et donc ne sont plus accessibles avec le ci-dessus mentionné
[[mapView_ subviews] lastObject]
. J'utilise maintenant...pour (UIView *vue dans l'auto.mapView.les sous-vues) { NSString *viewClassString = NSStringFromClass([afficher]); if ([viewClassString rangeOfString:@"GMSUISettingsView"].emplacement de choix != NSNotFound) { for (UIView *vue2.les sous-vues) { if ([vue2 isKindOfClass:[UIButton classe]]) { _myLocationButton = (UIButton *)vue2; } } } }
Merci ,Ça fonctionne pour moi
OriginalL'auteur Felix
Vous pouvez utiliser le rembourrage de la GMSMapView.
SWIFT 3
viewMap.padding = UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 0)
OriginalL'auteur 3lvis
dans swift 3 xcode 8
OriginalL'auteur Franklin Samboni Castillo
OriginalL'auteur Spydy
À compter de juillet 2015, c'est une façon de le faire:
OriginalL'auteur CoachNono
OriginalL'auteur Vikash Rajput