【问题标题】:How to add marker for a map view in google maps sdk for ios in swift如何在 swift 中为 ios 的 google maps sdk 中的地图视图添加标记
【发布时间】:2015-09-26 00:54:28
【问题描述】:

尝试在谷歌地图上添加标记,但应用在addMarker()函数调用时崩溃,异常详情如下,

由于未捕获的异常“GMSThreadException”而终止应用,原因:“必须从 UI 线程进行对 Google Maps SDK for iOS 的所有调用”

仅供参考 vwGogleMap 是全局的,并且在我试图绘制标记的函数中。

func addMarker() -> Void
{
    var vwGogleMap : GMSMapView?
    var position = CLLocationCoordinate2DMake(17.411647,78.435637)
    var marker = GMSMarker(position: position)
    marker.title = "Hello World"
    marker.map = vwGogleMap
}

任何帮助将不胜感激,

TIA。

【问题讨论】:

  • 通常情况下,这意味着您将代码放在后台线程而不是 UI 线程中。请您提供更多代码吗?所以,我可以看到你把这段代码放在你的文件中的什么地方。
  • 在视图控制器的顶层 ViewController: UIViewController { var Gmap : GMSMapView?覆盖 func viewDidLoad() { super.viewDidLoad() self. addMarker() } func addMarker { var position = CLLocationCoordinate2DMake(17.411647, 78.435637) var marker : GMSMarker = GMSMarker(position: position) as GMSMarker marker.title = "Hello World" marker.map = Gmap } }

标签: ios swift google-maps-sdk-ios markers gmsmapview


【解决方案1】:
/// Marker - Google Place marker
let marker: GMSMarker = GMSMarker() // Allocating Marker

 marker.title = "Title" // Setting title
 marker.snippet = "Sub title" // Setting sub title
 marker.icon = UIImage(named: "") // Marker icon
 marker.appearAnimation = .pop // Appearing animation. default
 marker.position = location.coordinate // CLLocationCoordinate2D

DispatchQueue.main.async { // Setting marker on mapview in main thread.
   marker.map = mapView // Setting marker on Mapview
}

【讨论】:

    【解决方案2】:
        @IBOutlet weak var mapView: GMSMapView!
    override func viewDidLoad() {
            super.viewDidLoad()
    
            mapView.camera = GMSCameraPosition.camera(withLatitude: 18.514043, longitude: 57.377796, zoom: 6.0)
            let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: 18.514043, longitude: 57.377796))
            marker.title = "Lokaci Pvt. Ltd."
            marker.snippet = "Sec 132 Noida India"
            marker.map = mapView
        }
    

    【讨论】:

      【解决方案3】:

      在闭包中执行 UI 更新(在我的例子中 - 绘图标记)时,请记住仅在主线程上获取主线程并执行 UI 操作

      我所做的错误是,我正在尝试在 Web 服务完成块中绘制标记。

      dispatch_async(dispatch_get_main_queue(),
      {
          var position = CLLocationCoordinate2DMake(17.411647,78.435637)
          var marker = GMSMarker(position: position)
          marker.title = "Hello World"
          marker.map = vwGogleMap
      })
      
      // For swift 3.0 support.
      // 1. Get Main thread
      DispatchQueue.main.async
      {
          // 2. Perform UI Operations.
          var position = CLLocationCoordinate2DMake(17.411647,78.435637)
          var marker = GMSMarker(position: position)
          marker.title = "Hello World"
          marker.map = vwGoogleMap
      }
      

      希望这对某人有所帮助!

      【讨论】:

      • 谢谢哥们!你节省了我的时间。
      • 感谢您的代码。当我尝试在闭合中绘制折线时,它可以帮助我解决问题应用程序崩溃。
      • @naresh reddy 。你能告诉我如何更新谷歌地图中的标记位置吗?
      • @Madhavi marker.position = CLLocationCoordinate2DMake(17.411647,78.435637) 希望这会有所帮助。
      【解决方案4】:
      var marker = GMSMarker()
      marker.location = location
      marker.title = location.name
      marker.snippet = "Info window text"
      marker.map = mapView
      

      location 属性必须设置为 CLLocationCoordinate2D

      要创建一个新的位置坐标,请使用:

       CLLocationCoordinate2D(latitude: CLLocationDegrees(<latitude>), longitude: CLLocationDegrees(<longitude>))
      

      其实很简单.. 确保您的地图已通过这样做进行初始化

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        相关资源
        最近更新 更多