使用Google Maps ios sdk和swiftui的自定义标记信息窗口

问题描述 投票:0回答:1

在我的应用中,我试图使自定义信息窗口在使用GoogleMaps和SwiftUI视图点击标记(GMSMarker)时出现。

我一直在这里参考Google的文档:https://developers.google.com/maps/documentation/ios-sdk/reference/protocol_g_m_s_map_view_delegate-p

目前,我可以通过返回UIView在GMSMapViewDelegate上使用'markerInfoWindow'方法显示自定义信息窗口,但是由于几乎所有应用程序都是使用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的样式,如果这是我唯一的选择,那么它可以是HStack和VStack的混合体吗?

[在我的应用中,我尝试使用GoogleMaps和SwiftUI视图点击标记(GMSMarker)时显示自定义信息窗口。我一直在这里参考Google的文档:https:// developers ....

swift google-maps uiview google-maps-markers swiftui
1个回答
0
投票

我认为您可以在这种情况下使用UIHostingController。我没有在Google地图中尝试过此操作,因为我没有一个使用它们的项目,因此YMMV,但它至少可以为您提供一个起点。

要使用UIHostingController,我们可以传递要使用的SwiftUI视图。您可以在SwiftUI中设置其大小的样式,也可以在标注中添加边框。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.