2014-03-14 52 views
1

我有一个项目,我需要根据我们得到的位置数组在地图上显示一些标记。我们使用自定义标记引脚而不是默认值。一个要求是,如果我们放大超过某个缩放阈值,我们需要显示更大的标记图标。所以我们有一个小针图像和一个大针图像。基于缩放级别,我们需要显示更大或更小。我明白一种方法是清除所有标记并重新添加它们。但是,由于其他一些挑战,该解决方案对我们无效。我需要简单地替换标记图标图像。以下是我的代码:iOS谷歌地图SDK替换标记图标

-(void)updateMarkerImagePinSize { 
NSLog(@"Update Marker Image called"); 
//[self.mapView clear]; 

UIImage *pinImage; 
AtmLocations *atmLocations = [ATMLocatorManager sharedATMLocatorManager].atmLocations; 
CLLocationCoordinate2D searchedAddressCoordinate = CLLocationCoordinate2DMake(atmLocations.locations.startLatitude, atmLocations.locations.startLongitude); 
[self addSearchLocationMarkerToMap:searchedAddressCoordinate]; 

NSArray *locationArray = atmLocations.locations.location; 

if (locationArray == nil || [locationArray count] == 0){ 
    return; 
} 

for (Location *location in locationArray) { 

    CLLocationCoordinate2D markerCoordinate = CLLocationCoordinate2DMake([[[location attributes] latitude] doubleValue], [[[location attributes] longitude] doubleValue]); 

    GMSMarker *marker = [GMSMarker markerWithPosition:markerCoordinate]; 

    if ([location.attributes.locationType isEqualToString:@"ATM"]) { 


     if (self.mapView.camera.zoom < kZoomThresoldForMarkerImageSizeChange) { 
      pinImage = [UIImage imageNamed:@"atm_pin_small"]; 
     } else { 
      pinImage = [UIImage imageNamed:@"atm_pin"]; 
     } 
    } else { 

     if (self.mapView.camera.zoom < kZoomThresoldForMarkerImageSizeChange) { 
      pinImage = [UIImage imageNamed:@"office_pin_small"]; 
     } else { 
      pinImage = [UIImage imageNamed:@"office_pin"]; 
     } 

    } 


    marker.map = nil; 
    marker.icon = pinImage; 
    marker.map = self.mapView; 

} 

}

不过,我所面临的问题是,无论是标记图标图像依然存在。我该如何更换标记图像而不显示两者?

回答

1

其实,我想通了,什么问题是:

GMSMarker *marker = [GMSMarker markerWithPosition:markerCoordinate]; 

我错过了markerWithPosition是一个构造函数和在该位置不能简单地返回标记,如果它的存在。因此,它每次都会创建新的标记。通过创建标记的NSMutableArray并管理该数组来解决此问题