Ich verwende Google Maps SDK in meiner iOS App. Ich bevölke die Karte mit den Clustering-Methoden.iOS Google Maps, verschiedene benutzerdefinierte Bilder für Cluster und einzelne Markierungen
Ich habe benutzerdefinierte Bilder für die verschiedenen Clustering Eimer ex. 10,20 ...
Die einzelnen Marker haben jedoch die Standardeinstellung (google maps red marker icon).
Ich möchte ein benutzerdefiniertes Symbol für Clustering und ein anderes für einzelne Markierungen.
Innerhalb der Methoden, die den Cluster rendern, die Marker hinzufügen, wenn Sie die Markierungssymbole festlegen, ändert es alle Bilder nicht nur Singles.
Wie lege ich verschiedene Symbole für Singles und Cluster fest?
dies fügt die Elemente clusterManager
id<GMUClusterItem> item =
[[POIItem alloc] initWithPosition:CLLocationCoordinate2DMake([bay.latitude doubleValue], [bay.longitude doubleValue]) name:bay.name status:bay.marker_status];
[clusterManager addItem:item];
Hier habe ich die Symbole für die Cluster-Eimer
- (id<GMUClusterIconGenerator>)iconGeneratorWithImages {
return [[GMUDefaultClusterIconGenerator alloc] initWithBuckets:@[ @10, @50, @100, @200, @1000 ]
backgroundImages:@[
[UIImage imageNamed:@"big_parking_pin_img"],
[UIImage imageNamed:@"big_parking_pin_img"],
[UIImage imageNamed:@"big_parking_pin_img"],
[UIImage imageNamed:@"big_parking_pin_img"],
[UIImage imageNamed:@"big_parking_pin_img"]
]];
}
Dies ist, wo die Google-Cluster-Klasse fügt Marker
- (void)renderCluster:(id<GMUCluster>)cluster animated:(BOOL)animated {
float zoom = _mapView.camera.zoom;
if ([self shouldRenderAsCluster:cluster atZoom:zoom]) {
CLLocationCoordinate2D fromPosition;
if (animated) {
id<GMUCluster> fromCluster =
[self overlappingClusterForCluster:cluster itemMap:_itemToOldClusterMap];
animated = fromCluster != nil;
fromPosition = fromCluster.position;
}
UIImage *icon = [_clusterIconGenerator iconForSize:cluster.count];
GMSMarker *marker = [self markerWithPosition:cluster.position
from:fromPosition
userData:cluster
clusterIcon:icon
animated:animated];
[_markers addObject:marker];
} else {
for (id<GMUClusterItem> item in cluster.items) {
CLLocationCoordinate2D fromPosition;
BOOL shouldAnimate = animated;
if (shouldAnimate) {
GMUWrappingDictionaryKey *key = [[GMUWrappingDictionaryKey alloc] initWithObject:item];
id<GMUCluster> fromCluster = [_itemToOldClusterMap objectForKey:key];
shouldAnimate = fromCluster != nil;
fromPosition = fromCluster.position;
}
GMSMarker *marker = [self markerWithPosition:item.position
from:fromPosition
userData:item
clusterIcon:nil
animated:shouldAnimate];
[_markers addObject:marker];
[_renderedClusterItems addObject:item];
}
}
[_renderedClusters addObject:cluster];
}
// Returns a marker at final position of |position| with attached |userData|.
// If animated is YES, animates from the closest point from |points|.
- (GMSMarker *)markerWithPosition:(CLLocationCoordinate2D)position
from:(CLLocationCoordinate2D)from
userData:(id)userData
clusterIcon:(UIImage *)clusterIcon
animated:(BOOL)animated {
CLLocationCoordinate2D initialPosition = animated ? from : position;
GMSMarker *marker = [GMSMarker markerWithPosition:initialPosition];
marker.userData = userData;
if (clusterIcon != nil) {
marker.icon = clusterIcon;
marker.groundAnchor = CGPointMake(0.5, 0.5);
}
marker.map = _mapView;
if (animated) {
[CATransaction begin];
[CATransaction setAnimationDuration:kGMUAnimationDuration];
marker.layer.latitude = position.latitude;
marker.layer.longitude = position.longitude;
[CATransaction commit];
}
return marker;
}