Add text on custom marker on google map for ios

后端 未结 4 1259
青春惊慌失措
青春惊慌失措 2020-12-31 08:56

Am trying to put marker with Textview .Is there any posibility to add text over marker on google map in ios.

  • Like This

相关标签:
4条回答
  • 2020-12-31 09:22

    func createImage(_ count: Int) -> UIImage? {
        let string = String(count)
        let paragraphStyle = NSMutableParagraphStyle()
        let font = UIFont.systemFont(ofSize: 9.5)
        paragraphStyle.alignment = .center
        let attributes: [NSAttributedString.Key: Any] = [
            .font : font,
            .foregroundColor: UIColor.black,
            .paragraphStyle: paragraphStyle
        ]
        
        let attrStr = NSAttributedString(string: string, attributes: attributes)
    
        let image = self.imageWithImage(image: UIImage(named: "pin_online.png")!, scaledToSize: CGSize(width: 50.0, height: 60.0))
        UIGraphicsBeginImageContext(image.size)
        UIGraphicsBeginImageContextWithOptions(image.size, false, 0.0)
        image.draw(in: CGRect(x: 0, y: 0, width: CGFloat(image.size.width), height: CGFloat(image.size.height)))
        let rect = CGRect(x: 14.7, y: CGFloat(3), width: CGFloat(image.size.width), height: CGFloat(image.size.height))
        attrStr.draw(in: rect)
        let markerImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
    
        return markerImage
    }
    
    0 讨论(0)
  • 2020-12-31 09:27

    You must make a view, where you must create an imageView (with your marker image) and Label (with your text) and take a screenshot of that view, and set as icon to your GMSMarker. Something like this:

    - (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;
    }
    
    0 讨论(0)
  • 2020-12-31 09:41

    If you want to display something like this , then just follow these steps. It is very simple, You can use this method.

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

    and when you set marker to the map then just set

        GMSMarker *marker = [[GMSMarker alloc] init];
        marker.icon = [self createImage:[model.strFriendCount integerValue]]; // pass any integer to the method.
    
    0 讨论(0)
  • 2020-12-31 09:41

    Here is the Swift 5 version of Kunal's answer:

    //count is the integer that has to be shown on the marker
    func createImage(_ count: Int) -> UIImage {
    
        let color = UIColor.red
        // select needed color
        let string = "\(UInt(count))"
        // the string to colorize
        let attrs: [NSAttributedString.Key: Any] = [.foregroundColor: 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
    }  
    

    Hope this helps someone else.

    0 讨论(0)
提交回复
热议问题