我想知道是否有办法更改所选标记的颜色或图像,然后在不再选择时将其更改回来。我看到使用Apple Maps的Yelp会更改所选标记的颜色/图像,然后在不再选择该标记后再返回到原始图像,并且想知道Google Map iOS SDK是否有类似的东西或是否有人遇到过这个问题,并找到了解决方案。
我尝试过:
我查看了Google的标记文档(found here),看到他们marker.opacity
更改了不透明度,marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]];
更改了标记的颜色。
我尝试通过添加此行-(UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;
或此行marker.icon = [GMSMarker markerImageWithColor: [UIColor differentColor]];
在marker.icon = [UIImage imageNamed:@"differentColorImage"];
中手动更改它,但当您点击标记/信息窗口时,图像/颜色保持原样。
有人有什么想法吗?一切都有帮助。提前谢谢!
答案 0 :(得分:6)
要更改所选标记的图标以及未选择的标记, 首先,我将所有GMSMarker添加到一个数组中。之后,在委托函数didTapMarker中: 我选择了标记并更改了该标记的图标
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker
{
marker.icon=[UIImage imageNamed:@"selectedicon.png"];//selected marker
for (int i=0; i<[markerArray count]; i++)
{
GMSMarker *unselectedMarker=markerArray[i];
//check selected marker and unselected marker position
if(unselectedMarker.position.latitude!=marker.position.latitude && unselectedMarker.position.longitude!=marker.position.longitude)
{
unselectedMarker.icon=[UIImage imageNamed:@"unselectedicon.png"];
}
}
return NO;
}
这对我有用。
答案 1 :(得分:5)
只是让任何人来看看,我通过使用自己的方法和自己的变量解决了这个问题。我使用了两个全局变量:GMSMarker *selectedMarker
和BOOL isMarkerActive
。在mapview:markerInfoWindow
内部,我检查标记是否处于活动状态,如果是这意味着在此标记之前有一个活动标记,那么不要强调该标记。之后,我将当前标记设置为选定标记,将bool设置为true,然后突出显示该标记,如下所示。
if(self.isMarkerActive == TRUE){
[self unhighlightMarker:self.selectedMarker];
}
self.selectedMarker = marker;
self.isMarkerActive = TRUE;
[self highlightMarker:marker];
在highlightMarker方法中,我检查我发送的发送标记是否等于地图的选定标记
-(void)highlightMarker:(GMSMarker *)marker{
if(self.mapView.selectedMarker isEqual:marker]){
marker.icon = [UIImage imageNamed:@"marker-selected-icon"];
}
}
在unhighlightMarker方法中执行相同的操作
-(void)unhighlightMarker:(GMSMarker* )marker{
marker.icon = [UIImage imageNamed:@"marker-icon"];
}
最后,我检查地图上的水龙头,看看bool是否为真,并且地图的选定标记不等于nil
- (void)mapView:(GMSMapView *)amapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate{
if(self.isMarkerActive == TRUE){
if(amapView.selectedMarker != nil){
self.isMarkerActive = FALSE;
[self unhighlightMarker:self.selectedMarker];
self.selectedMarker = nil;
amapView.selectedMarker = nil;
}
}
}
希望这可以帮助其他人。