是否可以从didTapOverlay方法更改GMSPolygon fillColor?

时间:2016-03-08 15:01:08

标签: ios swift google-maps

是否可以从GMSPolygon didTapOverlay委派方法更改GMSMapViewDelegate .fillColor 属性?这是委派方法:

func mapView(mapView: GMSMapView, didTapOverlay overlay: GMSOverlay)

我的问题是GMSPolygon继承自GMSOverlay,而叠加层没有fillColor属性。我想要实现的结果是当用户点击它时改变多边形的颜色

由于

2 个答案:

答案 0 :(得分:0)

之前我遇到过同样的情况(我当时使用的是Objective-C)。

我的解决方案是生成唯一ID(随机字符串或数字),然后将它们设置为每个GMSPolygons的title属性。

以下代码由Objective-C编写,但您可能理解

- (void)mapView:(GMSMapView *)mapView didTapOverlay:(GMSOverlay *)overlay {
  NSString *overlayClass = NSStringFromClass([overlay class]);
  if ([overlayClass isEqualToString:@"GMSPolygon"] ||
      [overlayClass isEqualToString:@"GMSPolyline"] ||
      [overlayClass isEqualToString:@"GMSCircle"] ||
      [overlayClass isEqualToString:@"GMSGroundOverlay"]) {
    [self triggerOverlayEvent:@"overlay_click" id:overlay.title];  // <-- here
  }
}

当然,您需要自己使用生成的ID管理所有多边形(和其他多边形)。

答案 1 :(得分:0)

我找到了一种简单的(单行)方式。由于$(function() { var y1 = [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]; var y2 = [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]; var y3 = [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 151.2]; var color1="yellow", color2="green", color3="red"; var name1="Montreal",name2="Paris",name3="Mostaganem"; var yObj1=[],yObj2=[],yObj3=[]; function pushfct(tempObj,x,y,z){ var temp={y:0,color:"xxxx", name:"xxxx"}; temp.y=x; temp.color=y; temp.name=z; tempObj.push(temp); } for (i = 0; i < y1.length; i++) { if (y1[i] < y2[i]) if (y1[i] < y3[i]) if (y2[i] < y3[i]) { pushfct(yObj1,y1[i],color1, name1); pushfct(yObj2,y2[i], color2, name2); pushfct(yObj3,y3[i], color3, name3); } else { pushfct(yObj1,y1[i], color1, name1); pushfct(yObj2,y3[i], color3, name3); pushfct(yObj3,y2[i], color2, name2); } else { pushfct(yObj1,y3[i], color3, name3); pushfct(yObj2,y1[i], color1, name1); pushfct(yObj3,y2[i], color2, name2); } else if (y2[i] < y3[i]) if (y1[i] < y3[i]) { pushfct(yObj1,y2[i], color2, name2); pushfct(yObj2,y1[i], color1, name1); pushfct(yObj3,y3[i], color3, name3); } else { pushfct(yObj1,y2[i], color2, name2); pushfct(yObj2,y3[i], color3, name3); pushfct(yObj3,y1[i], color1, name1); } else { pushfct(yObj1,y3[i],color3, name3); pushfct(yObj2,y2[i], color2, name2); pushfct(yObj3,y1[i], color1, name1); } } $('#container').highcharts({ chart: { type: 'column' }, tooltip: { formatter:function(){ return this.key +': $'+ this.y; } }, series: [{ showInLegend:false, data: yObj1, }, { showInLegend:false, data: yObj2, }, { showInLegend:false, data: yObj3, }] }); }); GMSPolygon的子类,我们可以将他转换为GMSPolygon对象,委托方法将继续正常工作,并将其视为GMSPolygon对象,更改它GMSOverlay { {1}}属性。

以下是代码:

.fillColor