Я все еще новичок в Xcode и SwiftUI, поэтому я приношу свои извинения, если это просто для некоторых людей. По сути, я делаю приложение, которое использует GoogleMaps iOS SDK, и я пытаюсь выяснить, как сфокусировать камеру карты на текущем местоположении пользователя при запуске.
Сейчас мой код работает так, что у меня естьосновной вид, который вызывает представление GoogleMaps и несколько других представлений. Карта инициализируется, и камера фокусируется на заданном мною местоположении (Бостон), сбрасывает булавку в определенном месте (Бостон), отображает мое текущее местоположение с синей точкой, а камера фокусируется на моем текущем местоположении ТОЛЬКО ПОСЛЕНажата кнопка myLocation (которая присуща Google Maps).
Мой основной вид, который вызывает мой вид карт Google, находится здесь:
import SwiftUI
struct LandmarkList: View {
@State private var searchText = ""
@State private var locationText = ""
var body: some View {
NavigationView {
GoogMapView()
.frame(height: 750)
}
.edgesIgnoringSafeArea(.vertical)
.navigationBarItems(leading:
TextField("Current Location",text: self.$locationText)
.textFieldStyle(RoundedBorderTextFieldStyle())
.multilineTextAlignment(.leading)
.frame(width: 375)
)
}
Мой вид карт Google (я называю его GoogMapView): ОБНОВЛЕНО НА ОСНОВЕ КОММЕНТАРИЙ И ОБУЧЕНИЯ НИЖЕ:
import SwiftUI
//import MapKit
import UIKit
import GoogleMaps
import GooglePlaces
private let locationManager = CLLocationManager()
struct GoogMapView : UIViewRepresentable {
let marker : GMSMarker = GMSMarker()
//Creates a `UIView` instance to be presented.
func makeUIView(context: Self.Context) -> GMSMapView {
// Create a GMSCameraPosition
let camera = GMSCameraPosition.camera(withLatitude: 42.361145, longitude: -71.057083, zoom: 16.0)
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
mapView.setMinZoom(14, maxZoom: 20)
mapView.settings.compassButton = true
mapView.isMyLocationEnabled = true
mapView.settings.myLocationButton = true
mapView.settings.scrollGestures = true
mapView.settings.zoomGestures = true
mapView.settings.rotateGestures = true
mapView.settings.tiltGestures = true
mapView.isIndoorEnabled = false
if let mylocation = mapView.myLocation {
print("User's location: \(mylocation)")
} else {
print("User's location is unknown")
}
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
return mapView
}
// Updates the presented `UIView` (and coordinator) to the latestconfiguration.
func updateUIView(_ mapView: GMSMapView, context: Self.Context) {
// Creates a marker in the center of the map.
marker.position = CLLocationCoordinate2D(latitude: 42.361145, longitude: -71.057083)
marker.title = "Boston"
marker.snippet = "USA"
marker.map = mapView
}
}
Я думал, что смогу взять mapView.myLocation и использовать его для ручной фокусировки камеры на карте при запуске, но это не сработало. Вы можете увидеть в приведенном выше коде, я пытаюсь распечатать местоположение, но все, что я получаю, это «Местоположение пользователя неизвестно». Кроме того, теперь появляется ошибка «Невозможно присвоить значение типа« GoogMapView »для типа« CLLocationManagerDelegate? »,« Где я печатаю »locationManager.delegate = self».
Кто-нибудь имеет представление о «правильном» способечтобы камера фокусировалась на текущем местоположении пользователя при запуске?