SwiftUI Button 与 Map 交互

Posted

技术标签:

【中文标题】SwiftUI Button 与 Map 交互【英文标题】:SwiftUI Button interact with Map 【发布时间】:2019-12-19 17:32:47 【问题描述】:

我是 Swift 和 SwiftUI 的新手,对于一个项目组,我需要开发我的第一个 ios 应用程序。

我可以使用 Mapbox 显示地图,但是当我点击按钮时我不知道如何关注我的用户。

我不知道如何让我的按钮与我的 struct MapView 交互

这是我的代码:

MapView.swift:

import Mapbox

struct MapView: UIViewRepresentable 

    let mapView: MGLMapView = MGLMapView(frame: .zero)

    func makeCoordinator() -> Coordinator 
        Coordinator(self)
    

    func makeUIView(context: UIViewRepresentableContext<MapView>) -> MGLMapView 
        mapView.delegate = context.coordinator
        return mapView
    

    func updateUIView(_ uiView: MGLMapView, context: UIViewRepresentableContext<MapView>) 

    

    func styleURL(_ styleURL: URL) -> MapView 
        mapView.styleURL = styleURL
        return self
    

    func centerCoordinate(_ centerCoordinate: CLLocationCoordinate2D) -> MapView 
        mapView.centerCoordinate = centerCoordinate
        return self
    

    func zoomLevel(_ zoomLevel: Double) -> MapView 
        mapView.zoomLevel = zoomLevel
        return self
    

    func userTrackingMode(_ userTrackingMode: MGLUserTrackingMode) -> MapView 
        mapView.userTrackingMode = userTrackingMode
        return self
    


class Coordinator: NSObject, MGLMapViewDelegate 
    var parent: MapView

    init(_ parent: MapView) 
        self.parent = parent
    

ContentView.swift:

import Mapbox

struct ContentView: View 

    @Environment(\.colorScheme) var colorScheme: ColorScheme

    var body: some View 
        ZStack 
            MapView()
                .userTrackingMode(.follow)
                .edgesIgnoringSafeArea(.all)
            HStack(alignment: .top) 
                Spacer()
                VStack() 
                    Button(action: 
                        //ACTION TO CHANGE FOLLOW MODE
                    ) 
                        Image(systemName: "location.fill")
                            .frame(width: 40.0, height: 40.0)
                    
                    .padding(.top, 60.0)
                    .padding(.trailing, 10.0)
                    .frame(width: 45.0, height: 80.0)
                    Spacer()
                

            
        
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView().environment(\.colorScheme, .dark)
    

非常感谢!

【问题讨论】:

【参考方案1】:

实际上我认为在您的情况下,由于您有对 map 的引用,您可以尝试直接与它进行交互(也就是命令式,因为它天生就是这样,所以不需要把简单的事情复杂化)

喜欢

...

let myMapHolder = MapView()
var body: some View 
    ZStack 
        myMapHolder
            .userTrackingMode(.follow)
            .edgesIgnoringSafeArea(.all)
    ...



       VStack() 
            Button(action: 
                self.myMapHolder.mapView.userTrackingMode = _your_mode_
            ) 
                Image(systemName: "location.fill")

【讨论】:

以上是关于SwiftUI Button 与 Map 交互的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI button 与sheet的使用

SwiftUI - 将 Button 的内容向左对齐

SwiftUI 中的 WKWebView - 用户与网站交互时如何切换视图?

iOS SwiftUI 在与代码交互时如何调出“嵌入 VStack”之类的额外操作?

浅谈SwiftUI 3.0新加入的CoreData动态FetchRequest过滤与排序特性

如何修复自定义按钮在 SwiftUI(IOS) 中的交互?