iOS学习iOS开发之技能点iOS

iOS 地图使⽤(二)

2015-11-12  本文已影响2442人  iOS_成才录

一、需求

效果图.png
        -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
        {
            /**
             MKUserLocation : 被称作“大头针模型”,其实喊什么都行,本质就是一个数据模型,只不过此模型遵循了大头针要遵循的协议(MKAnnotation)
             location:  用户当前所在位置信息(CLLocation对象)
             title:     大头针标注要显示的标题(NSString对象)
             subtitle:  大头针标注要显示的子标题(NSString对象)
             */
            // 根据用户当前位置的经纬度,设置地图显示中心
            /**
                存在弊端:地图显示比例过大,无法调整
                解决方案:直接使用对应的调整地图“显示区域”的API
             */
        //    [mapView setCenterCoordinate:userLocation.coordinate animated:YES];
            /**
              MKCoordinateSpan 跨度解释:
              latitudeDelta:纬度跨度,因为南北纬各90度,所以此值的范围是(0---180);此值表示,整个地图视图宽度,显示多大跨度
              longitudeDelta:经度跨度,因为东西经各180度,所以此值范围是(0---360):此值表示,整个地图视图高度,显示多大跨度
             注意:地图视图显示,不会更改地图的比例,会以地图视图高度或宽度较小的那个为基准,按比例调整
             */
        //    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
        //    MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, span);
        //    [mapView setRegion:region animated:YES];
        }

        // 当地图区域(跨度)改变时调用
        -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
        {
            NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);
        }

二、完整实例:

#import "ViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *mapView;

/** 位置管理者 */
@property (nonatomic, strong) CLLocationManager *locationM;

@end

@implementation ViewController

#pragma mark -懒加载
-(CLLocationManager *)locationM
{
    if (!_locationM) {
        _locationM = [[CLLocationManager alloc] init];
       
        // 版本适配
        if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
            [_locationM requestAlwaysAuthorization];
        }
    }
    return _locationM;
}

- (void)viewDidLoad {
    [super viewDidLoad];
 
//    MKMapTypeStandard = 0, // 标准地图
//    MKMapTypeSatellite, // 卫星云图
//    MKMapTypeHybrid, // 混合(在卫星云图上加了标准地图的覆盖层)
//    MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体
//    MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D混合
    // 设置地图显示样式(必须注意,设置时 注意对应的版本)
    self.mapView.mapType = MKMapTypeStandard;
    
    
    // 设置地图的控制项
    // 是否可以滚动
//    self.mapView.scrollEnabled = NO;
    // 缩放
//    self.mapView.zoomEnabled = NO;
    // 旋转
//    self.mapView.rotateEnabled = NO;
    
    // 设置地图的显示项(注意::版本适配)
    // 显示建筑物
    self.mapView.showsBuildings = YES;
    // 指南针
    self.mapView.showsCompass = YES;
    // 兴趣点
    self.mapView.showsPointsOfInterest = YES;
    // 比例尺
    self.mapView.showsScale = YES;
    // 交通
    self.mapView.showsTraffic = YES;
    
    // 显示用户位置
    [self locationM];
    // 显示用户位置, 但是地图并不会自动放大到合适比例
   self.mapView.showsUserLocation = YES;
    
    /**
     *  MKUserTrackingModeNone = 0, 不追踪
     MKUserTrackingModeFollow,  追踪
     MKUserTrackingModeFollowWithHeading, 带方向的追踪
     */
    // 不但显示用户位置, 而且还会自动放大地图到合适的比例(也要进行定位授权)
    // 不灵光
//    self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
}

#pragma mark -MKMapViewDelegate 
/**
 *  当地图获取到用户位置时调用
 *
 *  @param mapView      地图
 *  @param userLocation 大头针数据模型
 */
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    /**
     *  MKUserLocation : 专业术语: 大头针模型 其实喊什么都行, 只不过这个类遵循了大头针数据模型必须遵循的一个协议 MKAnnotation 
     // title : 标注的标题
     // subtitle : 标注的子标题
     */
    userLocation.title = @"标题";
    userLocation.subtitle = @"子标题";
    
    // 移动地图的中心,显示用户的当前位置
//    [mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
    
    // 显示地图的显示区域
    // 控制区域中心
    CLLocationCoordinate2D center = userLocation.location.coordinate;
    
    // 设置区域跨度
    MKCoordinateSpan span = MKCoordinateSpanMake(0.077919, 0.044529);

    // 创建一个区域
    MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
    // 设置地图显示区域
    [mapView setRegion:region animated:YES];
}

/**
 *  地图区域已经改变时带哦用
 *
 *  @param mapView  地图
 *  @param animated 动画
 */
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);
}

/**
 *  地图区域将要改变时带哦用
 *
 *  @param mapView  地图
 *  @param animated 动画
 */
-(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
  
}
@end
上一篇 下一篇

猜你喜欢

热点阅读