В моем приложении я пытаюсь заставить настраиваемое информационное окно появляться при нажатии маркера (GMSMarker) с помощью GoogleMaps и представления SwiftUI.
Я ссылаюсь на документацию Google здесь: https://developers.google.com/maps/documentation/ios-sdk/reference/protocol_g_m_s_map_view_delegate-p
В настоящее время я могу отображать пользовательское информационное окно, используя метод markerInfoWindow на моем GMSMapViewDelegate, возвращая UIView, но, поскольку почти все мое приложение построено с использованием представлений swiftui, я хотел бы иметь возможность отображать существующее представление swiftui, а нечем воссоздать представление как UIView.
Вот моя текущая функция, которая создает, а затем отображает базовый UIView в качестве информационного окна (его серый прямоугольник с текстом на нем):
func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView {
print("Showing marker infowindow")
let mInfoWindow = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width - 48, height: 200))
mInfoWindow.backgroundColor = UIColor.lightGray
mInfoWindow.layer.cornerRadius = 6
let lbl1 = UILabel(frame: CGRect.init(x: 8, y: 8, width: view.frame.size.width - 16, height: 15))
lbl1.text = "Hi there!"
mInfoWindow.addSubview(lbl1)
return mInfoWindow
}
Здесьэто вид swiftui, который я хотел бы показать вместо этого:
import SwiftUI
import UIKit
struct MarkerInfoWindow: View {
var body: some View {
HStack {
Text("Image here")
VStack {
Text("Content 1")
Text("Content 2")
}
Text("button here")
}
}
}
Я довольно новичок в swift, так что это может быть очевидно для более опытных разработчиков, , но есть ли способ, которым я могу вернутьсямой вид swiftui как UIView, чтобы я мог отобразить его в информационном окне?
Или есть способ легколе мой UIView, так что это может быть смесь HStacks и VStacks, если это мой единственный вариант?