在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位置坐标的意思。