如何解决在 SwiftUI/MapKit 中添加单个 MapMarker
我正在研究 Apple 官方网站提供的 SwiftUI Tutorial,关于显示名称、地图、几个见解的描述。我想在 MapKit 中使用 MapPin
或 MapMarker
添加单个图钉或标记到地图上。但是,我不知道 RandomAccessCollection
是什么意思,这对于 annotationItems
的参数 Map
是必需的。
我想要做的就是使用 coordinate
中的 MapView
在地图上创建单个 MapMarker。 coordinate
的数据会从其他结构体转移过来。
import SwiftUI
import MapKit
struct MapView: View {
var coordinate: CLLocationCoordinate2D
@AppStorage("MapView.zoom")
private var zoom: Zoom = .medium
enum Zoom: String,CaseIterable,Identifiable {
case near = "Near"
case medium = "Medium"
case far = "Far"
var id: Zoom {
return self
}
}
var delta: CLLocationdegrees {
switch zoom {
case .near: return 0.02
case .medium: return 0.2
case .far: return 2
}
}
var body: some View {
Map(coordinateRegion: .constant(region),annotationItems: _) { _ in
MapMarker(coordinate: coordinate)
}
}
var region: MKCoordinateRegion {
MKCoordinateRegion(
center: coordinate,span: MKCoordinateSpan(latitudeDelta: delta,longitudeDelta: delta)
)
}
}
struct MapView_Previews: PreviewProvider {
static var previews: some View {
MapView(coordinate: CLLocationCoordinate2D(latitude: 34.011_286,longitude: -116.166_868))
}
}
对于整个项目,coordinate
中MapView
的数据会从Landmark
(从加载.json的类ModelData
中转移)>
import Foundation
import SwiftUI
import CoreLocation
struct Landmark: Hashable,Codable,Identifiable {
var id: Int
var name: String
var park: String
var state: String
var description: String
var isFavorite:Bool
var isFeatured: Bool
var category: Category
enum Category: String,Codable {
case lakes = "Lakes"
case rivers = "Rivers"
case mountains = "Mountains"
}
private var imageName: String
var image: Image {
Image(imageName)
}
var featureImage: Image? {
isFeatured ? Image(imageName + "_feature") : nil
}
private var coordinates: Coordinates
var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: coordinates.latitude,longitude: coordinates.longitude)
}
struct Coordinates: Hashable,Codable {
var latitude: Double
var longitude: Double
}
}
我应该如何使用 MapMarker,还是应该使用其他方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。