MapView的简单实用

在storyBoard中使用到非UIKit的框架,要在项目的TARGETS-->General-->Linked Frameworks and Libraries中点击+号添加MapKit框架,遵守MKMapViewDelegate协议

@interface ViewController ()
    @property (weak, nonatomic) IBOutlet MKMapView *mapView;
    @property (nonatomic, strong) CLLocationManager *locationManager;
@end
// 1.请求用户授权
    // 创建对象并请求授权
    self.locationManager = [[CLLocationManager alloc] init];
    [self.locationManager requestWhenInUseAuthorization];
    
    /*
     MKMapTypeStandard     标准地图
     MKMapTypeSatellite    卫星地图
     MKMapTypeHybrid       鸟瞰地图
     MKMapTypeSatelliteFlyover
     MKMapTypeHybridFlyover
     */
    // 设置地图类型
    self.mapView.mapType = MKMapTypeStandard;
    // 实时的交通情况 -->iOS9新增方法
    self.mapView.showsTraffic = YES;
    
    // 2.用户跟踪模式
    /*
     MKUserTrackingModeNone  无
     MKUserTrackingModeFollow 跟踪位置
     MKUserTrackingModeFollowWithHeading 跟踪位置并跟踪方向
     */
    self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    // 3.设置代理
    self.mapView.delegate = self;

确定当前位置(region-->MKCoordinateRegion)
确定一个区域和确定一个圆类似,需要且只需要确定两个元素:1.中心点经纬度CLLocationCoordinate2D-->self.mapView.userLocation.coordinate 2.经纬度跨度span-->MKCoordinateSpan 两个都是结构体,直接make。
如何确定系统默认经纬度跨度 --> 在mapView的代理方法regionDidChangeAnimated中,当地图区域改变时回自动调用,在此方法中打印经纬度跨度。
如果需要动画回到当前位置,调用mapView的 setRegion: animated:
当区域改变的时候调用

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"latitudeDelta:%f     longitudeDelta:%f",mapView.region.span.latitudeDelta,mapView.region.span.longitudeDelta);
}

方法

点击按钮回到初始位置

- (IBAction)backToCurrentLocation:(id)sender
{
//    self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
    // 区域 region --两个结构体 center span
    // center 经度和纬度
    // span   经度跨度和纬度跨度
    // 当前区域的中心点经纬度
    CLLocationCoordinate2D center = self.mapView.userLocation.location.coordinate;
    // 当前区域的经纬度跨度
    MKCoordinateSpan span = MKCoordinateSpanMake(0.021251, 0.016093);
    // 确定区域
    MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
//    self.mapView.region = region;
    // 加入系统动画
    [self.mapView setRegion:region animated:YES];
}

放大和缩小地图其实就是:"当前"地图显示的中心点经纬度不变,经纬度跨度(span)缩小或增大2倍;
注意:在回到当前位置设置region时的中心点经纬度是定位到用户的经纬度(userLocation),而放大缩小地图的中心点经纬度是当前地图界面的中心点经纬度。

点击按钮放大地图

// 放大地图
- (IBAction)biggerMap:(id)sender
{
    // 纬度跨度
    CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 0.5;
    // 经度跨度
    CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 0.5;
    // 经纬度跨度
    MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
    // 确定区域
    [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:YES];
}

点击按钮缩小地图

- (IBAction)smallerMap:(id)sender
{
    // 纬度跨度
    CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 2;
    // 经度跨度
    CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 2;
    // 经纬度跨度
    MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
    // 确定区域
    [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:YES];
}

你可能感兴趣的:(MapView的简单实用)