web-dev-qa-db-ja.com

グーグルマップでマップビューのマーカーを追加する方法swift

Googleマップにマーカーを追加しようとしていますが、addMarker()関数呼び出し中にアプリがクラッシュします。例外の詳細は次のとおりです、

キャッチされなかった例外が原因でアプリを終了しています 'GMSThreadException'、理由: 'iOS用GoogleマップSDKへのすべての呼び出しはUIスレッドから行う必要があります'

参考までに、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。

7
Naresh Reddy M

クロージャでの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
}

これが誰かに役立つことを願っています!

22
Naresh Reddy M
/// 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
}
5
    @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
    }
2
Raghib Arshi
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>))

それは本当に簡単です..それを行うことによってあなたの地図が初期化されていることを確認してください

1
siegy22