2015-11-03 61 views
3

如何在iOS中的Google地圖上的多邊形上添加文本標籤?我試圖添加疊加層,但它只接受圖像而不是文本?我使用谷歌地圖與斯威夫特IOS在iOS 9將文本標籤添加到Google地圖中的多邊形中swift

這是代碼困擾我的部分:

func updateUIMap(){ 

      var str = "Hello" 
      var data = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 
      var drawText = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      let size = CGSize(width: 24.0,height: 24.0) 

      var inImage = UIImage() 
      var textColor: UIColor = UIColor.blackColor() 
      var textFont: UIFont = UIFont(name: "Helvetica Bold", size: 12)! 
      UIGraphicsBeginImageContext(size) 
      let textFontAttributes = [ 
       NSFontAttributeName: textFont, 
       NSForegroundColorAttributeName: textColor, 
      ] 

      inImage.drawInRect(CGRectMake(0, 0, size.width, size.height)) 

      var rect: CGRect = CGRectMake(24, 24, size.width, size.height) 

      drawText.drawInRect(rect, withAttributes: textFontAttributes) 

      var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 


      UIGraphicsEndImageContext() 

      var overlay = GMSGroundOverlay(position: myposition, icon: newImage, zoomLevel:20) 
      overlay.bearing = 0 
      overlay.map = self.mapView 
} 
+0

您可以發佈您關於添加疊加多邊形代碼? – ztan

+0

只需發佈您請求的代碼! – Jallal

+0

[displayLayer()](https://developer.apple.com/library/ios/documentation/QuartzCore/Reference/CALayerDelegate_protocol/)是來自CALayerDelegate的委託方法,因此您需要實現此方法,您不能直接調用它來自'NSObject'的'GMSPolygon',如果你想顯示一個文本,你可以先將文本轉換爲'UIImage'。 – ztan

回答

3

UIGraphics繪製方法可能是不正確的,你可以試試下面的代碼,以使從文本的新形象:

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

} 

enter image description here

+0

很好用。謝謝 – Jallal

+0

在SWIFT 3上嘗試了類似的東西,但除非所有的代碼都在UIViewController上,否則CPU似乎會被使用很多。在另一個類中創建標記,然後將UIImage添加到它會產生一些奇怪的循環? – Efren

相關問題