本文介绍了自定义标记使用GMUClusterManager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我想使用 GMUClusterManager 来显示自定义标记。我遵循了标记群集的所有步骤 但是当我放大地图时,它只显示红色标记,但我不' 有实例方法,我已经实现了我的逻辑,但没有用。 - (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,0,63,40)]; customMarker.backgroundColor = [UIColor blueColor]; marker.iconView = [self EmployeeMarker:0]; marker.appearAnimation = kGMSMarkerAnimationPop; marker.map = mapView; } 返回自我; $ b - (UIView *)EmployeeMarker:(int)labelTextInt { UIView * customMarker = [[UIView alloc] initWithFrame:CGRectMake(0,0,63,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,0,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-Boldsize: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]; 返回customMarker; } 我已经使用这种方法显示可能的标记数量,默认为红色。 id< GMUClusterAlgorithm>算法= [[GMUNonHierarchicalDistanceBasedAlgorithm alloc] init]; id< GMUClusterIconGenerator> iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init]; id< GMUClusterRenderer> renderer = [[GMUDefaultClusterRenderer alloc] initWithMapView:_mapView $ b $ clusterIconGenerator:iconGenerator]; _clusterManager = [[GMUClusterManager alloc] initWithMap:_mapView algorithm:algorithm renderer:renderer]; //生成并向集群管理器添加随机项目。 // [self generateClusterItems]; for(int i = 0; i id< GMUClusterItem> item = $ b $ [[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 protocol: CustomClusterIconGenerator.h文件 @interface CustomClusterIconGenerator :NSObject < GMUClusterIconGenerator> @end CustomClusterIconGenerator.m文件 @implementation CustomClusterIconGenerator $ b $ - (UIImage *)iconForSize:(NSUInteger)大小{ //返回自定义图标cluster return [UIImage imageNamed:@Your Custom Cluster Image]; $ b - (UIImage *)iconForMarker { //返回针脚返回的自定义图标[UIImage imageNamed:@Your Custom Marker Image]; $ b - (CGPoint)markerIconGroundAnchor { //如果您的标记图标居中移位,返回锚点的自定义值返回CGPointMake(0,0); $ b - (CGPoint)clusterIconGroundAnchor { //如果您的集群图标居中移位,返回锚点的自定义值返回CGPointMake(0,0); } @end 然后, id< GMUClusterIconGenerator> iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init]; 使用 CustomClusterIconGenerator * iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init]; 下面是我的项目示例: I want to display Custom marker using GMUClusterManager. I followed all steps for marker clustering here.but there is blue and red color Icon like this.But when I Zoom in that map it display only red color Marker but I don't want that.there is instance method where I have implemented my logic but no use. - (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, 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, 0, 63, 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, 0, 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;}I have used this method for display possible number of Marker that is by default red.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 delegates and also cluster method. [_clusterManager cluster]; [_clusterManager setDelegate:self mapDelegate:self];So please help me for adding custom marker in place of red that is in default. 解决方案 You need to create custom class, which conforms to GMUClusterIconGenerator protocol:CustomClusterIconGenerator.h file@interface CustomClusterIconGenerator : NSObject<GMUClusterIconGenerator>@endCustomClusterIconGenerator.m file@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, return custom value for anchor return CGPointMake(0, 0);}@endand then then, instead of id<GMUClusterIconGenerator> iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init];useCustomClusterIconGenerator *iconGenerator = [[GMUDefaultClusterIconGenerator alloc] init];Here is example from my project: 这篇关于自定义标记使用GMUClusterManager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 09-09 19:16