我想使用GMUClusterManager显示自定义标记.我按照标记聚类
here的所有步骤进行操作.
有实例方法,我已经实现了我的逻辑,但没有用.
- (instancetype)initWithMapView:(GMSMapView *)mapView clusterIconGenerator:(id<GMUClusterIconGenerator>)iconGenerator { if ((self = [super init])) { GMSMarker *marker= [GMSMarker markerWithPosition:CLLocationCoordinate2DMake(24.0,75.30)]; UIView *customMarker =[[UIView alloc] initWithFrame:CGRectMake(0,63,40)]; customMarker.backgroundColor = [UIColor blueColor]; marker.iconView = [self EmployeeMarker:0] ; marker.appearAnimation = kGMSMarkerAnimationPop; marker.map = mapView; } return self; } -(UIView *)EmployeeMarker:(int)labelTextInt{ UIView *customMarker =[[UIView alloc] initWithFrame:CGRectMake(0,40)]; UIImageView *imgViewCustomMarker = [[UIImageView alloc]initWithFrame:CGRectMake(0,15,24,25)]; imgViewCustomMarker.image = [UIImage imageNamed:@"iconMapUser.png"]; [customMarker addSubview:imgViewCustomMarker]; UIView *viewRatingCustom = [[UIView alloc] initWithFrame:CGRectMake(15,40,15)]; viewRatingCustom.backgroundColor = [UIColor colorWithRed:192.0/255.0 green:192.0/255.0 blue:192.0/255.0 alpha:1.0]; UILabel *lblRatingEmployees = [[UILabel alloc] initWithFrame:CGRectMake(8,1,17,8)]; lblRatingEmployees.textColor = [UIColor colorWithRed:0.00/255.0 green:100.0/255.0 blue:150.0/255.0 alpha:1.0]; lblRatingEmployees.text = @"1"; lblRatingEmployees.font = [UIFont fontWithName:@"Helvetica-Bold" size:10]; [lblRatingEmployees sizeToFit]; [viewRatingCustom addSubview:lblRatingEmployees]; UIImageView *imageViewStar = [[UIImageView alloc] initWithFrame:CGRectMake(25,3,10,8)]; imageViewStar.image = [UIImage imageNamed:@"iconBlueStar.png"]; [viewRatingCustom addSubview:imageViewStar]; [customMarker addSubview:viewRatingCustom]; return customMarker; }
id<GMUClusterAlgorithm> algorithm = [[GMUNonHierarchicalDistanceBasedAlgorithm alloc] init]; id<GMUClusterIconGenerator> iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init]; id<GMUClusterRenderer> renderer = [[GMUDefaultClusterRenderer alloc] initWithMapView:_mapView clusterIconGenerator:iconGenerator]; _clusterManager = [[GMUClusterManager alloc] initWithMap:_mapView algorithm:algorithm renderer:renderer]; // Generate and add random items to the cluster manager. // [self generateClusterItems]; for (int i = 0; i<latitudeArray.count; i++) { id<GMUClusterItem> item = [[POIItem alloc]initWithPosition:CLLocationCoordinate2DMake([[latitudeArray objectAtIndex:i]doubleValue],[[longitudeArray objectAtIndex:i]doubleValue]) name:@"Name"]; [_clusterManager addItem:item]; }
Adde代表和集群方法.
[_clusterManager cluster]; [_clusterManager setDelegate:self mapDelegate:self];
解决方法
您需要创建符合GMUClusterIconGenerator协议的自定义类:
CustomClusterIconGenerator.h文件
@interface CustomClusterIconGenerator : NSObject <GMUClusterIconGenerator> @end
CustomClusterIconGenerator.m文件
@implementation CustomClusterIconGenerator - (UIImage *)iconForSize:(NSUInteger)size { // Return custom icon for cluster return [UIImage imageNamed:@"Your Custom Cluster Image"]; } - (UIImage *)iconForMarker { // Return custom icon for pin return [UIImage imageNamed:@"Your Custom Marker Image"]; } - (CGPoint)markerIconGroundAnchor { // If your marker icon center shifted,return custom value for anchor return CGPointMake(0,0); } - (CGPoint)clusterIconGroundAnchor { // If your cluster icon center shifted,0); } @end
然后,而不是
id<GMUClusterIconGenerator> iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init];
使用
CustomClusterIconGenerator *iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init];