美文网首页
iOSMapKit地图简单使用

iOSMapKit地图简单使用

作者: 往日的时光 | 来源:发表于2017-08-31 21:30 被阅读0次

    一、MapKit框架使用前提

    1、导入框架

    地图和地址

    2、导入主头文件

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

    MapKit框架使用须知:

    MapKit框架中所有数据类型的前缀都是MK
    MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示

    二、显示地图的几种效果

        MKMapTypeStandard  // 标准地图
        MKMapTypeSatellite, // 卫星云图
        MKMapTypeHybrid, // 混合(在卫星云图上加了标准地图的覆盖层)
        MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体
        MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D混合
     设置地图显示样式(必须注意,设置时 注意对应的版本)
    

    下面是标准地图效果图,当然大家也可以试试其他几种:

    使用的拖拽控件的效果

    接下来上代码

    #import "ViewController.h"
    #import <MapKit/MapKit.h>
    #import <CoreLocation/CoreLocation.h>
    @interface ViewController ()<MKMapViewDelegate>
    
    @property(nonatomic,strong)MKMapView *mapView;
    @property (weak, nonatomic) IBOutlet UITextField *textwei;
    
    @property (weak, nonatomic) IBOutlet UITextField *textjing;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    //    self.view.backgroundColor = [UIColor whiteColor];
        
        self.mapView = [[MKMapView alloc]initWithFrame:CGRectMake(0, 70, self.view.frame.size.width, self.view.frame.size.height)];
        //    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.zoomEnabled = YES;
        //是否可以滚动
        self.mapView.scrollEnabled = YES;
        //旋转
        self.mapView.rotateEnabled = YES;
        //设置显示用户当前位置
        self.mapView.showsUserLocation = YES;
        //将 mapview 添加到视图
        [self.view addSubview:self.mapView];
        // 显示用户位置, 但是地图并不会自动放大到合适比例
        self.mapView.showsUserLocation = YES;
        // 为MKMapView设置delegate
        self.mapView.delegate = self;
        //设置经纬度(北京的经度 39.9,纬度:116.3)
        [self locateToLatitude:23.126272 longitude:113.395568];
    }
    - (IBAction)btn:(UIButton *)sender {
        
        NSString* latitudeStr = self.textwei.text;
        NSString* longtitudeStr = self.textjing.text;
        // 如果用户输入的经度、纬度不为空
        if (latitudeStr != nil && latitudeStr.length > 0
            && longtitudeStr != nil && longtitudeStr.length > 0)
        {
            // 调用自己实现的方法设置地图的显示位置和显示区域
            [self locateToLatitude:latitudeStr.floatValue
                         longitude:longtitudeStr.floatValue];
        }
    }
    
    - (void)locateToLatitude:(CGFloat)latitude longitude:(CGFloat)longitude
    {
        // 设置地图中心的经、纬度
        CLLocationCoordinate2D center = {latitude , longitude};
        // 设置地图显示的范围
        MKCoordinateSpan span;
        // 地图显示范围越小,细节越清楚
        span.latitudeDelta = 0.01;
        span.longitudeDelta = 0.01;
        // 创建MKCoordinateRegion对象,该对象代表了地图的显示中心和显示范围。
        MKCoordinateRegion region = {center,span};
        // 设置当前地图的显示中心和显示范围
        [self.mapView setRegion:region animated:YES];
    }
    
    
    
    @end
    

    <MKMapViewDelegate>代理有7种方法:

    // MKMapViewDelegate协议中的方法,当MKMapView显示区域将要发生改变时激发该方法
    - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
    {
        NSLog(@"地图控件的显示区域将要发生改变!");
    }
    // MKMapViewDelegate协议中的方法,当MKMapView显示区域改变完成时激发该方法
    - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
    {
        NSLog(@"地图控件的显示区域完成了改变!");
    }
    // MKMapViewDelegate协议中的方法,当MKMapView开始加载数据时激发该方法
    - (void) mapViewWillStartLoadingMap:(MKMapView *)mapView
    {
        NSLog(@"地图控件开始加载地图数据!");
    }
    // MKMapViewDelegate协议中的方法,当MKMapView加载数据完成时激发该方法
    - (void) mapViewDidFinishLoadingMap:(MKMapView *)mapView
    {
        NSLog(@"地图控件加载地图数据完成!");
    }
    // MKMapViewDelegate协议中的方法,当MKMapView加载数据失败时激发该方法
    - (void) mapViewDidFailLoadingMap:(MKMapView *)mapView
                            withError:(NSError *)error
    {
        NSLog(@"地图控件加载地图数据发生错误,错误信息 %@!" , error);
    }
    // MKMapViewDelegate协议中的方法,当MKMapView开始渲染地图时激发该方法
    - (void) mapViewWillStartRenderingMap:(MKMapView *)mapView
    {
        NSLog(@"地图控件开始渲染地图!");
    }
    // MKMapViewDelegate协议中的方法,当MKMapView渲染地图完成时激发该方法
    - (void) mapViewDidFinishRenderingMap:(MKMapView *)mapView
                            fullyRendered:(BOOL)fullyRendered
    {
        NSLog(@"地图控件渲染地图完成!");
    }
    

    相关文章

      网友评论

          本文标题:iOSMapKit地图简单使用

          本文链接:https://www.haomeiwen.com/subject/asucjxtx.html