如何解决SwiftUI 2-将动态纬度和经度附加到Map元素并进行注释
我在弄清楚如何从一个视图传递动态纬度/经度值并显示注释时遇到问题。我可以设置coordinateRegion,但是我不知道如何在不进行硬编码的情况下使注释显示在地图上。这是我目前拥有的内容,运行地图注释后仅在硬编码位置显示。我以为我可以使用设置可见区域的功能来更新该硬编码的经/纬度。因此,除非我实际查看的是与硬编码注释匹配的位置,否则现在地图不会显示图钉。
import SwiftUI
import SDWebImageSwiftUI
import MapKit
import CoreLocation
import Firebase
struct RestaurantDetail: View {
var edges = UIApplication.shared.windows.first?.safeAreaInsets
var name: String
var image: String
var category: String
var location: GeoPoint
var latitude: Double
var longitude: Double
var address: String
var city: String
var state: String
var zip: String
var website: String
var phone: String
var delivery: Bool
var takeout: Bool
var sitdown: Bool
var outdoor: Bool
@State private var coordinateRegion = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 40.7,longitude: -73.9),span: MKCoordinateSpan(latitudeDelta: 0.001,longitudeDelta: 0.001))
private let places: [Spot] = [
Spot(name: "Test",coordinate: CLLocationCoordinate2D(latitude: 28.552811,longitude: -81.503676))
]
var body: some View {
ScrollView(.vertical,showsIndicators: false) {
vstack {
HStack {
WebImage(url: URL(string: image))
.onSuccess { image,data,cacheType in
}
.resizable()
.placeholder(Image(systemName: "photo")) // Placeholder Image
// Supports viewbuilder as well
.placeholder {
Rectangle().foregroundColor(.gray)
}
.indicator(.activity) // Activity Indicator
.transition(.fade(duration: 0.5))
.frame(height: 270,alignment: .top)
.aspectRatio(contentMode: .fit)
.clipped()
}.onAppear(perform: getCoordinates)
vstack {
HStack {
Text(name)
.font(.title2)
.fontWeight(.bold)
Spacer()
}
.padding(.top)
HStack {
Text(address)
.font(.callout)
.foregroundColor(Color("Subtext"))
Spacer()
}
HStack {
Text(city)
.font(.callout)
.foregroundColor(Color("Subtext"))
+ Text(",\(state)")
.font(.callout)
.foregroundColor(Color("Subtext"))
+ Text(",\(zip)")
.font(.callout)
.foregroundColor(Color("Subtext"))
Spacer()
}
vstack {
Divider()
.padding(.top)
HStack {
if sitdown == true {
Image(systemName: "checkmark")
.font(.footnote)
.foregroundColor(Color.green)
} else {
Image(systemName: "xmark")
.font(.footnote)
.foregroundColor(Color.red)
}
Text("Dine-in")
.font(.footnote)
.padding(.trailing,8)
Text("· ")
.font(.footnote)
if takeout == true {
Image(systemName: "checkmark")
.font(.footnote)
.foregroundColor(Color.green)
} else {
Image(systemName: "xmark")
.font(.footnote)
.foregroundColor(Color.red)
}
Text("Takeout")
.font(.footnote)
.padding(.trailing,8)
Text("· ")
.font(.footnote)
if delivery == true {
Image(systemName: "checkmark")
.font(.footnote)
.foregroundColor(Color.green)
} else {
Image(systemName: "xmark")
.font(.footnote)
.foregroundColor(Color.red)
}
Text("Delivery")
.font(.footnote)
Spacer()
}.padding(.vertical,5)
// HStack {
// if outdoor == true {
// Image(systemName: "checkmark")
// } else {
// Image(systemName: "xmark")
// }
// Text("Outdoor Seating")
// .font(.footnote)
// .padding(.top,8)
// }.padding(.bottom)
Divider()
.padding(.bottom)
}
// MARK: Map View
vstack {
Map(coordinateRegion: $coordinateRegion,annotationItems: places,annotationContent: { place in MapPin(coordinate: place.coordinate)})
}.frame(height: 230)
vstack {
HStack {
Text(category)
Spacer()
}
HStack {
if website == "NA" {
Text("")
.frame(height: 0)
} else {
Image(systemName: "link.circle.fill")
Link(website,destination: URL(string: "http://\(website)")!)
//Text(website)
}
Spacer()
}.padding(.top)
HStack {
if phone == "0" {
Text("Phone number not available.")
} else {
Image(systemName: "phone.circle.fill")
Link(phone,destination: URL(string: "tel:\(phone)")!)
}
// Text(phone)
Spacer()
}.padding(.top)
}
}.padding(.horizontal)
Spacer()
}
}.ignoresSafeArea(.all)
}
func getCoordinates() {
// print(latitude)
coordinateRegion.center.latitude = latitude
coordinateRegion.center.longitude = longitude
//Spot(name: name,coordinate: CLLocationCoordinate2D(latitude: latitude,longitude: longitude))
Spot.init(name: name,longitude: longitude))
print(Spot.init(name: name,longitude: longitude))
// print (coordinateRegion.center)
}
}
struct Spot: Identifiable {
let id = UUID()
var name: String
var coordinate: CLLocationCoordinate2D
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。