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
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.
}
}
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.