Add a text label to a polygon in google maps for iOS swift

后端 未结 2 1497
半阙折子戏
半阙折子戏 2020-12-19 17:08

How do I add a text label on a polygon in Google Maps in iOS ? I tried to add an overlay but it will only accept images not text? I am using google maps for ios with Swift

相关标签:
2条回答
  • 2020-12-19 17:28

    Your UIGraphics drawing method might not be correct, you can try the following code to make a new image from a text:

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            super.viewDidLoad()
    
            let camera = GMSCameraPosition.cameraWithLatitude(40.712216,
                longitude: -74.22655, zoom: 10)
            let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
            mapView.myLocationEnabled = true
            self.view = mapView
    
            addGroundOverlay(camera.target)
        }
    
        func newImage(text: String, size: CGSize) -> UIImage {
    
            let data = text.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
            let drawText = NSString(data: data!, encoding: NSUTF8StringEncoding)
    
            let textFontAttributes = [
                NSFontAttributeName: UIFont(name: "Helvetica Bold", size: 20)!,
                NSForegroundColorAttributeName: UIColor.redColor(),
            ]
    
            UIGraphicsBeginImageContextWithOptions(size, false, 0)
            drawText?.drawInRect(CGRectMake(0, 0, size.width, size.height), withAttributes: textFontAttributes)
            let newImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
    
            return newImage
        }
    
        func addGroundOverlay(position: CLLocationCoordinate2D) {
    
            let overlay = GMSGroundOverlay(position: position, icon: newImage("Hello StackOverflow", size: CGSizeMake(150.0, 150.0)), zoomLevel: 10)
            overlay.bearing = 0
            overlay.map = (self.view as! GMSMapView)
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    }
    

    0 讨论(0)
  • 2020-12-19 17:53

    I've found personally that the easiest way to do this is by adding a GMSMarker with a UILabel as it's iconView property.

                let labelMarker = GMSMarker(position: coordinate)
                let label = UILabel()
                label.text = "Hello friends"
                label.sizeToFit()
                labelMarker.iconView = label
                labelMarker.map = mapView
    

    This approach can run into performance issues if you're adding a TON of markers to the map, but it's very effective if you need to add some labels to a map.

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