ios-MapKit的使用

来源:互联网 发布:帝国cms火车头视频接口 编辑:程序博客网 时间:2024/06/03 02:26

在MapKit框架中有这么一个控件叫做MKMapView

在使用它时我们需要导入一个头文件

#import <MapKit/MapKit.h>

在MKMapView中我们可以通过mapType来设置地图的类型

MKMapTypeStandard,标准
MKMapTypeSatellite,卫星地图
MKMapTypeHybrid,鸟瞰混合
ios9之后新增加的两项:

MKMapTypeSatelliteFlyover,卫星地图的立体样式
MKMapTypeHybridFlyover,鸟瞰地图的立体样式

我们想要在地图中获取自己的位置的话,在ios8之后我们需要自己主动的去请求用户的隐私

if([UIDevice currentDevice].systemVersion.doubleValue>=8.0)    {                 [self.manager requestAlwaysAuthorization];    }
之前我们获取位置都是通过Core Location框架中的
CLLocationManager中的startUpdatingLocation去请求位置,然后通过设置它的代理,实现相应的代理方法去拿到位置。

但是现在在MapKit中我们可以直接通过MKMapView的userTrackingMode这个属性进行设置。

这个属性总共有三个枚举值

MKUserTrackingModeNone = 0, 不追踪的
MKUserTrackingModeFollow, 追踪
MKUserTrackingModeFollowWithHeading 追踪并且获取所在的方向

MKMapView默认是可以旋转的,我们可以进行设置使其不能发生旋转

//设置地图不允许旋转 self.mapView.rotateEnabled = NO;
当我们获取到位置的时候,mapView会通过代理来通知我们,也就是说会调用下面这个代理方法

当每次更新到用户的位置就会去调用,注意这里是只有位置发生改变才会去调用,下面的userLocation就可以称之为大头针的一个数据模型

我们可以通过修改这个userLocation中的title和subtitle来进行设置,在这个MKUserLocation类中有位置,标题,子标题,方向等属性。

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{    userLocation.title = @"哈哈哈";    userLocation.subtitle = @"飞飞飞";}

我们想要移动地图到当前用户的位置,并且设置为中心点,可以进行如下设置。其中userLocation就是上面我们获取到的。

[self.mapView setCenterCoordinate:userLocation.coordinate animated:YES];

我们想要设置经纬度的跨越可以这么设置,这里要稍微提一下的是调用这个方法setRegion:(MKCoordinateRegion)region animated:(BOOL)animated; 有的时候会成功,有的时候不会成功。

//获取中心点    CLLocationCoordinate2D center = userLocation.location.coordinate;          //设置经纬度的跨度    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);    //将用户当前的位置作为显示区域的中心点    MKCoordinateRegion region = MKCoordinateRegionMake(center, span);        //设置显示的区域    self.mapView.region = region;
当地图跨度改变的时候会调用这个方法

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{    NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);}
CLLocation中里面最重要的就是coordinate,我们可以通过coordinate来创建一个位置对象,coordinate就是2D位置坐标的意思。