SwiftUI地图标记点Marker
SwiftUI地图标记点Marker

SwiftUI地图标记点Marker

SwiftUI 中的Marker方法,用于在地图上显示一个标记点,并允许通过闭包提供自定义的内容视图(View)。

Marker 的初始化方法覆盖了多种常见的标记场景,从简单的文本标记到自定义内容的标记。

初始化方法及其适用场景

1、完全自定义内容

public init(coordinate: CLLocationCoordinate2D, @ViewBuilder label: () -> Label)

用途: 允许你通过一个闭包提供自定义的 SwiftUI 视图作为标记内容。

示例:

Marker(coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141)) {
    Image(systemName: "paperplane.fill")
}

适用场景: 当需要完全定制标记内容时,比如自定义图标、复杂视图等。 

2、文本标记 (Localized Key)

public init(_ titleKey: LocalizedStringKey, coordinate: CLLocationCoordinate2D)

用途: 使用一个本地化的字符串作为标记的标题,显示在默认气泡中。

示例:

Marker("My Location", coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141))

适用场景: 当标记的内容只是简单的标题文本。

3、文本标记 (普通字符串)

public init<S>(_ title: S, coordinate: CLLocationCoordinate2D) where S: StringProtocol

用途: 类似于上面的本地化版本,但直接使用普通字符串。

示例:

Marker("Simple Text", coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141))

适用场景: 当不需要本地化字符串时。

4、文本和短字符标记 (Monogram)

public init(_ titleKey: LocalizedStringKey, monogram: Text, coordinate: CLLocationCoordinate2D)
public init<S>(_ title: S, monogram: Text, coordinate: CLLocationCoordinate2D) where S : StringProtocol

用途: 在标记的气泡图标中显示短字符(最多 3 个),同时提供标题。

示例:

Marker("Palace", monogram: Text("BP"), coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141))

适用场景: 想在标记的图标中显示缩写或简短字符。

5、文本和系统图标标记

public init(_ titleKey: LocalizedStringKey, systemImage: String, coordinate: CLLocationCoordinate2D)
public init<S>(_ title: S, systemImage: String, coordinate: CLLocationCoordinate2D) where S : StringProtocol

用途: 使用 SF Symbols 图标作为标记的气泡图标,同时提供标题。

示例:

Marker("Tower", systemImage: "building.columns", coordinate: CLLocationCoordinate2D(latitude: 51.508, longitude: -0.076))

适用场景: 想用系统图标作为标记图标时。

6、文本和图片标记

public init(_ titleKey: LocalizedStringKey, image: String, coordinate: CLLocationCoordinate2D)
public init<S>(_ title: S, image: String, coordinate: CLLocationCoordinate2D) where S : StringProtocol

用途: 使用本地图片作为标记的气泡图标,同时提供标题。

示例:

Marker("Custom Image", image: "custom-icon", coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141))

适用场景: 想使用自定义图片资源作为标记图标时。

Image在实际测试过程中是空白的,即使是使用32 * 32小尺寸照片:

7、使用 MapKit 提供的默认标记

public init(item: MKMapItem) where Label == Text

用途: 直接使用一个 MKMapItem 对象来生成标记,MKMapItem 会自动提供相关信息(如名称)。

示例:

let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141)))
Marker(item: mapItem)

适用场景: 当已有一个 MKMapItem 对象时。

总结

简单场景: 用带文本标题的初始化方法(如 Marker(“Title”, coordinate:))。

图标场景: 用带 systemImage 或 image 的方法。

自定义场景: 用 Marker(coordinate:content:) 自定义内容。

MapKit 集成: 用 Marker(item:)。

选择合适的初始化方法取决于标记内容需求和地图交互复杂度。

相关文章

SwiftUI地图标记点Annotation:https://fangjunyu.com/2024/11/22/swiftui%e5%9c%b0%e5%9b%be%e6%a0%87%e8%ae%b0%e7%82%b9annotation/

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注