iOSMapKit地图简单使用

一、MapKit框架使用前提

1、导入框架

iOSMapKit地图简单使用_第1张图片
地图和地址

2、导入主头文件

#import 
#import 

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混合
 设置地图显示样式(必须注意,设置时 注意对应的版本)

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

iOSMapKit地图简单使用_第2张图片
使用的拖拽控件的效果

接下来上代码

#import "ViewController.h"
#import 
#import 
@interface ViewController ()

@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

代理有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地图简单使用)