MapKit

作者: iOS_July | 来源:发表于2018-06-11 10:41 被阅读17次

    一、了解

    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类

    相关文章

      网友评论

        本文标题:MapKit

        本文链接:https://www.haomeiwen.com/subject/artbsftx.html