如何向 GMSMarker 添加阴影?

How to add shadow to a GMSMarker?

我正在尝试向我的 GMSMapView 上的标记添加一些 shadow,但配置 GMSMarkerLayer 的阴影属性似乎没有任何效果。

GMSMarker *marker = [[GMSMarker alloc] init];
[marker setMap:self.mapView];
marker.snippet = @"Description";
marker.title = @"Title";
marker.position = busData.location.coordinate;
marker.icon = [UIImage imageNamed:@"BusMarker"];
marker.layer.shadowOpacity = 0.7;
marker.layer.shadowOffset = CGSizeMake(0, 3);
marker.layer.shadowRadius = 5.0;
marker.layer.shadowColor = [UIColor blackColor].CGColor;

我正在设置与 CALayer 对象相同的属性,因为 GMSMarkerLayer 是 CALayer 的子类。

我是做错了什么还是这是一个错误?我正在使用 SDK 版本 1.10.0.

这里要了解的是 Google iOS 上的地图是在 OpenGL 中实现的。因此,更改 GMSMarkerLayer 的默认属性没有视觉效果。抱歉。

您可以使用 iconView 属性 并在该视图内绘制阴影(保持在 iconView 的范围内)。

不是实际的,但它是答案:

-(UIImage *)makeShadowImage:(UIImage *) image;
{
    CALayer *imageLayer = [CALayer layer];
    imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
    imageLayer.contents = (id) image.CGImage;

    [imageLayer setShadowColor:[[UIColor grayColor] CGColor]];
    [imageLayer setShadowOpacity:0.5];
    [imageLayer setShadowOffset:CGSizeMake(0, 0)];
    [imageLayer setShadowRadius:4.0];
    imageLayer.masksToBounds = YES;

    UIGraphicsBeginImageContext(image.size);
    [imageLayer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return roundedImage;
}