MKMapKit学习总结(一)简单使用(地图点击)

背景

原来的代码内都使用的高德地图的sdk进行实现地图功能,但老板觉得高德地图的卫星图zoom放大到很大的时候,地图不清晰了,没有资源了。
本着面向boss开发的思想,决定换用谷歌的资源,但是iOS的高德地图的sdk,不支持图层叠加谷歌的资源(安卓就可以,可以哭一会儿)。直接使用谷歌的sdk很麻烦,苹果自带的mkmapkit可以叠加很多的地图资源,包括谷歌的等等。

介绍

谷歌本身的地图资源就是高德的,本次学习,不单单介绍怎么替换谷歌的资源,包括整个MKMapKit的一些简单的使用。
大部分网上很容易查到的使用方法,我这里就一笔带过,主要是写一些,开发mkmapkit中遇到的坑,和高德sdk中不太一样的地方。

简单使用

初始化

为了方便统一处理地图的类,我创建了一个view专门用来放这个地图的view

    _mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height)];
    //旋转
    _mapView.rotateEnabled = NO;
    //指南针
    _mapView.showsCompass = YES;
    //比例尺
    _mapView.showsScale = NO;
    //3D旋转
   _mapView.rotateEnabled = NO;
     _mapView.delegate  = self;
    [self addSubview:_mapView];
  1. MKMapView的 mapType 设置地图类型
    • MKMapTypeStandard :普通地图(左图)
    • MKMapTypeSatellite :卫星云图 (中图)
    • MKMapTypeHybrid :混合模式(普通地图覆盖于卫星云图之上 )
    • MKMapTypeSatelliteFlyover: 3D立体卫星 (iOS9.0)
    • MKMapTypeHybridFlyover: 3D立体混合 (iOS9.0)
  2. 地图的其他属性
    1. 操作项:
      • 是否可缩放 zoomEnabled
      • 是否可滚动 scrollEnabled
      • 是否可旋转 rotateEnabled
    2. 显示项:
      • 是否显示指南针 showsCompass (iOS9.0)
      • 是否显示比例尺 showsScale (iOS9.0)
      • 是否显示交通 showsTraffic (iOS9.0)
      • 是否显示建筑 showsBuildings

委托代理

这样地图就添加进去了,比较重要的代理
* 对地图上面的点,进行设置的代理,后面包括聚合效果也会在这里实现

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
{
}

* 对地图上的线,和线围城的区域进行设置的代理
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(nonnull id)overlay
{
}
* 点击大头针的反馈
// 点击大头针反馈
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
}   

其他

本文多介绍一种方法,是点击地图反馈方法。在原来高德的sdk中,有这种代理,但是在mkmapkit中没有,需要自己实现。
首先在
- (void)viewDidLoad
中增加点击事件的监听

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapReceived:)];
    singleTap.numberOfTapsRequired = 1;
  singleTap.delegate = self;
  [self.mapView addGestureRecognizer:singleTap];

然后开始实现点击事件
需要进行经纬度转换

- (void)singleTapReceived:(UIGestureRecognizer*)gestureRecognizer
{
    CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
    CLLocationCoordinate2D touchMapCoordinate = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
// 得到点击后的经纬度地址,然后去执行下面的操作

}

你可能感兴趣的:(MKMapKit学习总结(一)简单使用(地图点击))