J'aimerais créer une fenêtre d'informations personnalisée pour Google Maps pour iOS, comme dans la photo ci-dessous. Est-il possible d'étendre GMSOverlay comme GMSMarker, GMSPolyline et GMSPolygon pour créer des graphiques personnalisés?
Réponses
Trop de publicités?Vous souhaitez utiliser l' markerInfoWindow
délégué de la méthode et de définir également la infoWindowAnchor
.
Lorsque vous créer un ensemble de marqueurs de l'ancre:
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = MARKER_POSITION;
marker.infoWindowAnchor = CGPointMake(0.44f, 0.45f);
marker.icon = [UIImage imageNamed:@"CustomMarkerImageName"];
puis créer le délégué de la méthode.
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
InfoWindow *view = [[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];
view.name.text = @"Place Name";
view.description.text = @"Place description";
view.phone.text = @"123 456 789";
view.placeImage.image = [UIImage imageNamed:@"customPlaceImage"];
view.placeImage.transform = CGAffineTransformMakeRotation(-.08);
return view;
}
Dans l'exemple ci-dessus, j'ai créé un xib et je charge que xib et le retour de la vue. Vous pouvez toujours construire une UIView juste dans le code si vous voulais à la place.
Vous pouvez passer ce type de UIImage comme icône comme ci-dessous
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(latitude,longitude);
GMSMarker *location = [GMSMarker markerWithPosition:position];
location.title = @"Location Name";
location.icon = [UIImage imageNamed:@"marker_icon.png"];
location.map = mapView_;
Pour plus de détails, voir cette Documentation.
Si vous voulez ce type d'image après marqueur pressé que vous devez avoir deux type d'images d'un seul endroit.
1ère image icône de marque uniquement.
2ème image est marqueur de lieu détail.
marqueur icône de chargement lorsque mapView initialiser comme le code ci-dessus.
Et la Deuxième Image marqueur de lieu détail que vous avez à charge comme à l'intérieur de marqueur pressé delegate
méthode à l'aide d' For-Loop
et NSMutablearray
en vérifiant marker.title
savoir qui repère est pressé.
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker
{
}