简单应用(自己当笔记用)
首先导入 MapKit.framework 框架,用 storyboard 拖一个 Map Kit View ,添加约束,全屏就可以.
然后在 ViewController 中引入头文件 import MapKit,下面就直接上代码
// 把 Map Kit View 从 storyboard 拖出来到 ViewController
@IBOutlet weak var mapView: MKMapView!
// 懒加载 CLLocationManager 的对象
lazy var locationM: CLLocationManager = {
let locationM = CLLocationManager()
if #available(iOS 8.0, *){
locationM.requestAlwaysAuthorization()
}
return locationM
}()
override func viewDidLoad() {
super.viewDidLoad()
// 设置地图样式
// case standard 标准
// case satellite 卫星
// case hybrid 混合(标准加卫星)
// @available(iOS 9.0, *)
// case satelliteFlyover 3D立体卫星
// @available(iOS 9.0, *)
// case hybridFlyover 3D立体混合
mapView.mapType = MKMapType.standard
// 设置地图的控制项(默认是ture)
// mapView.isScrollEnabled = false // 滚动
// mapView.isRotateEnabled = false // 旋转
// mapView.isZoomEnabled = false // 缩放
// 设置地图的显示项
mapView.showsBuildings = true // 建筑物
if #available(iOS 9.0, *) {
mapView.showsCompass = true // 指南针
mapView.showsScale = true // 比例尺
mapView.showsTraffic = true //交通状况
}
mapView.showsPointsOfInterest = true // poi兴趣点
// 1. 显示用户位置
_ = locationM
// 显示一个蓝点,在地图上面标示用户的位置信息
// 不会放大地图,位置移动时,不会自动追踪跟着动
mapView.showsUserLocation = true
// 2. 用户的追踪模式
// 显示一个蓝点,在地图上面标示用户的位置信息
// 会放大地图,位置移动时,会自动追踪跟着动
// mapView.userTrackingMode = MKUserTrackingMode.followWithHeading
// 3. 设置地图代理
mapView.delegate = self
}
写一个 ViewController 的扩展,用来实现 MKMapViewDelegate 代理方法
extension ViewController: MKMapViewDelegate {
// 当地图更新用户位置信息时,调用方法 (代理方法)
// 蓝点: 大头针'视图' 大头针'数据模型'
func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
// MKUserLocation: 大头针数据模型
// location: 大头针的位置信息(经纬度)
// heading: 设备朝向对象
userLocation.title = "haha" // 弹框标题
userLocation.subtitle = "qiqi" // 弹框子标题
// 移动地图的中心,显示在当前用户所在的位置(用户位置在哪,打开地图后会自动滑动定位到用户所在地)
// mapView.setCenter((userLocation.location?.coordinate)!, animated: true)
// 设置地图显示区域
let center = (userLocation.location?.coordinate)!
// 区域跨度 (前面经度 后面纬度)
let span = MKCoordinateSpanMake(0.0280733228951107, 0.0317991075990847)
let region: MKCoordinateRegion = MKCoordinateRegionMake(center, span)
mapView.setRegion(region, animated: true)
}
/// 区域改变时调用(为了获取合适的经纬度)
///
/// - parameter mapView: 地图
/// - parameter animated: 动画
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
// 打印经纬度(跨度)(前面经度 后面纬度)
// print(mapView.region.span.latitudeDelta,mapView.region.span.longitudeDelta)
}
}