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 中的 WKWebView - 用户与网站交互时如何切换视图?
iOS SwiftUI 在与代码交互时如何调出“嵌入 VStack”之类的额外操作?