Is it possible to display multiple info windows for multiple markers without tapping it?

前端 未结 2 1828
予麋鹿
予麋鹿 2021-01-03 12:49

I want to display multiple info window for multiple markers in google map. The info window should display without tapping the marker itself. Is it possible? After researchin

2条回答
  •  萌比男神i
    2021-01-03 13:36

    Here is the code to create custom markers as shown in the above image:

    Create a subclass of UIView and add the below method to the class.

    -(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;
    }
    

    In the above code, 2 labels are creates priceLabel and numberOfPropertiesLabel. The frame of both the labels are set according to your requirement i.e. the position of the labels in the view. Then the frame of the view is set according to the labels' dimensions.

    View is then converted into an image. This image is then set as the GMSMarker image.

提交回复
热议问题