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


我试图用Textview放置标记。是否有任何可能性在ios的谷歌地图上的标记上添加文本。Like this


12
2018-06-30 10:10


起源


尝试压缩位图并在其上绘制文本。将其保存在缓冲区中并在运行时将其传递给标记图标。 - Shivansh


答案:


您必须创建一个视图,您必须在其中创建一个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;
}

32
2018-06-30 11:57



嗨我已经按照相同的步骤,但问题是我的图像没有显示。 - Diksha


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.

10
2017-07-26 07:40





这是快速版本 库纳尔的回答

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
}  

希望这有助于其他人。


2
2018-01-04 16:46



当标记是一堆时有一些麻烦,但不是太多(例如:100),其中内存是一个问题: stackoverflow.com/questions/43910085/... - Efren