Swift基础入坑

MapKit

2018-06-11  本文已影响17人  iOS_July

一、了解

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

八、补充

如果要更深入的功能,如驾车、公交、地铁、步行、骑行、打的、火车、飞机、轮渡等路线信息
需要研究MKDirection类
上一篇下一篇

猜你喜欢

热点阅读