是否可以显示多个标记的多个信息窗口而无需点击它?

时间:2016-09-14 10:05:16

标签: ios swift google-maps google-maps-markers

我想在google地图中显示多个标记的多个信息窗口。信息窗口应显示而不点击标记本身。可能吗?经过研究,我了解到将标记设置为mapview选择标记可以使信息窗口显示而不会点击它。但是,一次不能选择多个标记作为地图视图的选定标记。有什么可以做的吗?

2 个答案:

答案 0 :(得分:2)

以下是创建自定义标记的代码,如上图所示:

创建UIView的子类,并将以下方法添加到类中。

-(UIImage*)createCustomMarkerImageWithMarker:(GMSMarker *)marker
{
    CGRect priceLabelRect = [marker.title boundingRectWithSize:CGSizeMake(500, 50)
                                                       options:NSStringDrawingUsesLineFragmentOrigin
                                                    attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10]}
                                                       context:nil];

    UILabel *priceLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, priceLabelRect.size.width+25, priceLabelRect.size.height+12)];
    priceLabel.text = [NSString stringWithFormat:@" ₹ %@ ",marker.title];
    priceLabel.textAlignment = NSTextAlignmentCenter;
    priceLabel.textColor = [UIColor blackColor];
    priceLabel.backgroundColor = [UIColor clearColor];
    priceLabel.font = [UIFont systemFontOfSize:11];



    CGRect numberOfPropertiesLabelRect = [marker.snippet boundingRectWithSize:CGSizeMake(300, 50)
                                                                      options:NSStringDrawingUsesLineFragmentOrigin
                                                                   attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10]}
                                                                      context:nil];
    UILabel *numberOfPropertiesLabel = [[UILabel alloc]initWithFrame:CGRectMake(priceLabel.frame.size.width, 0, numberOfPropertiesLabelRect.size.width+10, numberOfPropertiesLabelRect.size.height+12)];
    numberOfPropertiesLabel.text = marker.snippet;
    numberOfPropertiesLabel.textAlignment = NSTextAlignmentCenter;
    numberOfPropertiesLabel.textColor = [UIColor whiteColor];
    numberOfPropertiesLabel.backgroundColor = [UIColor clearColor];
    numberOfPropertiesLabel.font = [UIFont systemFontOfSize:11];

    self.frame = CGRectMake(0, 0, priceLabel.frame.size.width+numberOfPropertiesLabel.frame.size.width, priceLabel.frame.size.height+TriangleHeight);

    [self addSubview:priceLabel];
    [self addSubview:numberOfPropertiesLabel];


    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen] scale]);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * icon = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return icon;
}

在上面的代码中,有2个标签会创建priceLabelnumberOfPropertiesLabel。两个标签的框架根据您的要求设置,即视图中标签的位置。然后根据标签的尺寸设置视图的框架。

然后将视图转换为图像。然后将此图像设置为GMSMarker图像。

答案 1 :(得分:0)

您不能一次选择多个标记。

您可以改用替代方法。

您可以创建自定义标记,即可以创建自定义标记图像,使其包含您要在信息窗口中显示的信息/格式。

下面的图片可以让您了解如何实现它:

enter image description here