我正在开发一款使用 MKMapView
/Apple map 作为基础的应用程序,我想向 map 添加自定义点,以便“用户”能够从一个位置移动如果满足特定标准,则指向另一个。如何添加自定义 map 位置图标和用户图标?我研究过叠加层和其他东西,老实说我已经迷失在其中了。
该项目保留在 map 上的特定区域内,我想将 3 种不同类型的对象添加到特定的经度和纬度坐标,并让用户从一个对象移动到另一个对象。关于如何获取 map 上的点有什么建议吗?
我尝试过的事情:
- 地标
- map 项目
- mkmappointfor坐标
- mkmappoint
最佳答案
要让这项工作成功,需要做一些事情。首先,您需要一个基于 MKAnnotation 构建的自定义类,提供标题和坐标。例如,以下是存储首府城市的一个:
class Capital: NSObject, MKAnnotation {
var title: String?
var coordinate: CLLocationCoordinate2D
var info: String
init(title: String, coordinate: CLLocationCoordinate2D, info: String) {
self.title = title
self.coordinate = coordinate
self.info = info
}
}
然后,您可以使用数据创建注释对象,即您想要在 map 上显示的位置。以下是填写 Capital
注释的方法:
let london = Capital(title: "London", coordinate: CLLocationCoordinate2D(latitude: 51.507222, longitude: -0.1275), info: "Home to the 2012 Summer Olympics.")
let oslo = Capital(title: "Oslo", coordinate: CLLocationCoordinate2D(latitude: 59.95, longitude: 10.75), info: "Founded over a thousand years ago.")
接下来,将注释单独添加到 map View 中:
mapView.addAnnotation(london)
mapView.addAnnotation(oslo)
或者作为许多项目的数组:
mapView.addAnnotations([london, oslo])
最后,使您的 View Controller 成为 map View 的委托(delegate),并实现 viewForAnnotation
,以便在用户点击您的城市图钉时可以显示一些信息。这是一个基本示例:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
let identifier = "Capital"
if annotation.isKindOfClass(Capital.self) {
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView!.canShowCallout = true
} else {
annotationView!.annotation = annotation
}
return annotationView
}
return nil
}
现在,就 iOS 而言,每个注释都是唯一的,因此,如果您想将一张注释制作成伦敦的图片,将另一张注释制作成奥斯陆的图片,或者您只是想要不同的图钉颜色,那没问题 – 这实际上取决于你。您的“用户图标”可以是您想要的任何内容,只需设置注释 View 的 image
属性即可。
我希望这能为您指明正确的方向。祝你好运!
关于apple-maps - 将自定义位置点添加到 MKMapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29398452/