地图 Part1 - 定位及大头针的基本使用
一.MapKit
二.地图的基本使用
0.首先在storyboard上添加一个地图控件 - MapKitView
@IBOutlet weak var mapView: MKMapView!
1.设置地图的类型
// 可根据地图类型自己设定
mapView.mapType = .standard
@available(iOS 3.0, *)
public enum MKMapType : UInt {
case standard // 普通地图 (默认)
case satellite // 卫星云图
case hybrid // 混合地图(卫星云图+普通地图)
@available(iOS 9.0, *)
case satelliteFlyover // 3D卫星地图
@available(iOS 9.0, *)
case hybridFlyover // 3D混合卫星地图(3D卫星地图+普通地图)
}
2.设置地图的操作项
// 缩放
mapView.isZoomEnabled = false
// 旋转
mapView.isRotateEnabled = false
// 滚动
mapView.isScrollEnabled = false
3.设置地图的显示项
// 设置地图显示项(3D卫星混合信息)
if #available(iOS 9.0, *) {
mapView.showsCompass = true // 指南针
mapView.showsTraffic = true // 交通
mapView.showsScale = true // 比例尺
}
// 设置地图显示项
mapView.showsBuildings = true // 建筑物
mapView.showsPointsOfInterest = true // 兴趣点
4.在iOS 8.0之后定位需要主动授权
lazy var locationM : CLLocationManager = {
let locationM = CLLocationManager()
if #available(iOS 8.0, *) {
// 前后台授权
locationM.requestAlwaysAuthorization()
}
return locationM
}()
外界调用locationM的get方法,执行授权 定位,但不会追踪
_ = locationM
5.设置用户的追踪模式
有一个缺陷
只要动一下地图,就不再追踪用户的位置(不是很灵敏)
// 带方向的追踪
mapView.userTrackingMode = .followWithHeading
@available(iOS 5.0, *)
public enum MKUserTrackingMode : Int {
case none // 不追踪,也不会显示用户的位置(相当于showsUserLocation为false)
case follow // 追踪,会显示用户的位置showsUserLocation为true
case followWithHeading // 带方向的追踪,showsUserLocation为true
}
6.代理方法
mapView.delegate = self
6.1 当用户位置改变时
/// 当用户位置改变时就会来到这个方法
/// 在地图上显示一个蓝色的圆点来标注用户的位置
///
/// - Parameters:
/// - mapView: 地图视图
/// - userLocation: 大头针数据模型
func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
// print("用户位置改变")
// 大头针的标题和子标题
userLocation.title = "我是标题