MapItemPicker 是一个简单但高度可定制且功能强大的 SwiftUI 位置选择器。
许多应用程序都需要某种视图来查找和选择位置。遗憾的是,Apple 没有在其框架中提供此类视图,并且 Maps 应用程序中显示的许多信息(这些信息使得搜索和发现地图项目变得容易)在 MKMapItem
上并未公开。MapItemPicker 使用来自 MapKit、OpenStreetMaps 和 Wikidata 的数据,提供一个简单、美观且全面的地图项目选择器。
.mapItemPickerSheet(isPresented: $showsSheet) { mapItem in
print("Map Item:", mapItem)
}
.fullScreenCover(isPresented: $showsSheet) {
NavigationView {
MapItemPicker(
primaryMapItemAction: .init(
title: "select",
imageName: "checkmark.circle.fill",
handler: { mapItem in
print("Map Item:", mapItem)
return true
}
)
)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("cancel") {
showsSheet = false
}
}
}
.navigationTitle(Text("select"))
.navigationBarTitleDisplayMode(.inline)
.toolbarBackground(.visible, for: .navigationBar)
}
}
MapItemPicker(
annotations: [MKPointAnnotation.chicago],
annotationView: { annotation in
MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: nil)
},
annotationSelectionHandler: { annotation in
print("selected:", annotation)
},
overlays: [MKPolyline.newYorkToLosAngeles],
overlayRenderer: { overlay in
MKPolylineRenderer(polyline: overlay as! MKPolyline, color: .red)
},
primaryMapItemAction: .init(title: "select", imageName: "checkmark.circle.fill", handler: { mapItem in
print("Map Item:", mapItem)
return true
}),
additionalMapItemActions: [
.init(
title: "addTo",
imageName: "plus.square",
subActions: [
.init(title: "Collection A", imageName: "square.on.square", handler: { mapItem in return false }),
.init(title: "Collection B", imageName: "square.on.square", handler: { mapItem in return false })
]
)
],
showsLocationButton: false,
additionalTopRightButtons: [
.init(
imageName: "magnifyingglass",
handler: { searchControllerShown = true }
)
],
initialRegion: MKCoordinateRegion.unitedStates,
standardView: { Text("Standard View") },
searchControllerShown: $searchControllerShown,
standardSearchView: { Text("Search View") }
)
MapItemPicker 包含类别、视图中各部分标题和其他字符串的本地化。目前,仅支持英语和德语。如果您能提供任何其他语言的本地化,请提交 PR。您可以从 Sources/MapItemPicker/Resources/en.lproj
中的英文 Localizable.strings
文件复制字符串。本地化键不多,您可能在 5 分钟内完成。
MKPointOfInterestCategory
的城市、山脉和其他项目,应该解决这个问题。