在谷歌地图上为自定义标记添加文本

时间:2014-06-30 10:10:42

标签: ios objective-c google-maps

我试图将标记放在Textview上。是否有可能在ios的谷歌地图上添加标记文字。Like this

4 个答案:

答案 0 :(得分:32)

您必须创建一个视图,您必须在其中创建一个imageView(带有您的标记图像)和Label(带有您的文本),并获取该视图的屏幕截图,并将其设置为GMSMarker的图标。 像这样:

- (void)foo
{
    GMSMarker *marker = [GMSMarker new];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,60,60)];
    UIImageView *pinImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myPin"]];
    UILabel *label = [UILabel new];
    label.text = @"1";
    //label.font = ...;
    [label sizeToFit];

    [view addSubview:pinImageView];
    [view addSubview:label];
    //i.e. customize view to get what you need    


    UIImage *markerIcon = [self imageFromView:view];
    marker.icon = markerIcon;        
    marker.map = self.mapView;      
}

- (UIImage *)imageFromView:(UIView *) view
{
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, [[UIScreen mainScreen] scale]);
    } else {
        UIGraphicsBeginImageContext(view.frame.size);
    }
    [view.layer renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

答案 1 :(得分:10)

enter image description here

如果您想显示类似的内容,请按照以下步骤操作。这很简单,你可以使用这种方法。

-(UIImage *)createImage:(NSUInteger)count{   //count is the integer that has to be shown on the marker 


UIColor *color = [UIColor redColor]; // select needed color
NSString *string = [NSString stringWithFormat:@"%lu",(unsigned long)count]; // the string to colorize
NSDictionary *attrs = @{ NSForegroundColorAttributeName : color };
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:string attributes:attrs]; // add Font according to your need

UIImage *image = [UIImage imageNamed:@"ic_marker_orange"]; // The image on which text has to be added
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];

CGRect rect = CGRectMake(20,5, image.size.width, image.size.height);// change the frame of your text from here
[[UIColor whiteColor] set];
[attrStr drawInRect:rect];
UIImage *markerImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return markerImage;}

当您将标记设置为地图时,只需设置

即可
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.icon = [self createImage:[model.strFriendCount integerValue]]; // pass any integer to the method.

答案 2 :(得分:4)

以下是Kunal's answer的快速版本:

func createImage(_ count: Int) -> UIImage {
    //count is the integer that has to be shown on the marker
    let color = UIColor.red
    // select needed color
    let string = "\(UInt(count))"
    // the string to colorize
    let attrs = [NSForegroundColorAttributeName: color]
    let attrStr = NSAttributedString(string: string, attributes: attrs)
    // add Font according to your need
    let image = UIImage(named: "ic_marker_orange")!
    // The image on which text has to be added
    UIGraphicsBeginImageContext(image.size)
    image.draw(in: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(image.size.width), height: CGFloat(image.size.height)))
    let rect = CGRect(x: CGFloat(20), y: CGFloat(5), width: CGFloat(image.size.width), height: CGFloat(image.size.height))

    attrStr.draw(in: rect)

    let markerImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return markerImage
}  

希望这有助于其他人。

答案 3 :(得分:0)

enter image description here

entity