一、了解
MapKit框架提供地图的显示、导航、地点标注、增加图层等。
利用MapKit可以集成一个全功能地图到app中,无需任何编码。
二、如何嵌入地图
默认Xcode工程中是没有绑定MapKit框架的,需要手动打开。
选择工程的TARGETS,然后在Capabilities中打开Maps即可
三、如何转换坐标
仅实际地址还不足以定位,必须是含经纬度的地址坐标
MapKit中的Geocoder类 用于这种转换,实现地址坐标间的互转数据保存在“地标(Placemark)”对象中
实例化一个CLGeocoder,调用geocodeAddressString方法即可
实际地址没有固定的格式,此方法会联网查询后返回一个地址对象数组
地址越精准,返回的地标越接近,如果地址不太准确,可能返回多个地标
通过解析完毕返回的地标对象(CLPlacemark类),就可获得地址的坐标
四、在地图上添加标注(📌)
常见的标注是一个弹框,左侧附加一张图片
开发角度,标注包含2个不同的对象:
数据对象(一个object):保存有地标的数据,遵从MKAnnotation协议
视图对象(一个view) : 用于展示地标,默认是图钉📌,如果想用其他的代替📌,需要自定义此view
MapKit默认有以上2个对象,无需自己创建
五、定制标注(📌)
想要自定义标注视图,需要遵从MKMapViewDelegate协议
// MARK: - MKMapKitDelegate
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
//如果用户 位置视图也是一个标注视图,就排除自定义[显示自己位置,不用标注]
if annotation is MKUserLocation {
return nil
}
//为了性能考虑,重用一个已经存在的标注视图
let id = "myAnnotationId"
var av = mapView.dequeueReusableAnnotationView(withIdentifier: id) as? MKPinAnnotationView
//无重用的 就初始化一个带📌的标注,并启用气球提示
if av == nil {
av = MKPinAnnotationView(annotation: annotation, reuseIdentifier: id)
av?.canShowCallout = true
}
//添加一个地区缩略图到标注视图中
let leftIconView = UIImageView(frame: CGRect(x: 0, y: 0, width: 53, height: 53))
leftIconView.image = UIImage(named: area.thumbImage)
av?.leftCalloutAccessoryView = leftIconView
return av
}
六、标注📌的颜色 pinTintColor属性
//📌颜色改变
av?.pinTintColor = UIColor.green
七、功能定制
showsTraffice 显示交通信息
mapView.showsTraffic = true
showsScale 显示比例尺[左上角]
mapView.showsScale = true
showsCompass 显示指南针按钮[右上角]
mapView.showsCompass = true
网友评论