Интеграция Google Maps в SwiftUI - PullRequest
       26

Интеграция Google Maps в SwiftUI

1 голос
/ 02 октября 2019

Я довольно новичок в программировании на Xcode и SwiftUI, и у меня возникают проблемы при интеграции Google Maps в проект SwiftUI.

Я добавил все нужные ключи API в свой файл AppDelegate.swift и создал представление под названием GoogMapViewчто я пытаюсь использовать для отображения экземпляра карт Google. Это мой код в файле GoogMapView:

import SwiftUI
import MapKit
import UIKit
import GoogleMaps
import GooglePlaces

struct GoogMapView : UIViewRepresentable {
    func makeUIView(context: Context) -> GMSMapView {
        GMSMapView(frame: .zero)
    }

    func updateUIView(_ view: GMSMapView, context: Context) {
        let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView

        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
    }

Я продолжаю получать сообщение об ошибке «view = mapView», но все, что я пробовал, не удалось. Любая идея, как настроить это, чтобы я мог вызвать его на главном экране?

1 Ответ

1 голос
/ 03 октября 2019

Я также новый разработчик iOS. Я изучал то же самое и наткнулся на ваш вопрос. Поскольку я новичок в iOS, я не могу утверждать, что он следует всем соответствующим соглашениям, но этот код работает для отображения карты на симуляторе с SwiftUI на базовом уровне. Решение основано на вашем коде и наблюдении Маттео.

import SwiftUI
import UIKit
import GoogleMaps

struct ContentView: UIViewRepresentable {
    let marker : GMSMarker = GMSMarker()

    /// Creates a `UIView` instance to be presented.
    func makeUIView(context: Self.Context) -> GMSMapView {
        // Create a GMSCameraPosition that tells the map to display the
        // coordinate -33.86,151.20 at zoom level 6.
        let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)

        return mapView
    }

    /// Updates the presented `UIView` (and coordinator) to the latest
    /// configuration.
    func updateUIView(_ mapView: GMSMapView, context: Self.Context) {
        // Creates a marker in the center of the map.
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
    }

}
...