iOSMapKit地图简单使用

一、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(@"地图控件渲染地图完成!");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,378评论 25 709
  • http://www.cnblogs.com/kenshincui/p/4125570.html 摘要: 现在很多...
    大崔老师阅读 8,560评论 1 2
  • 出自http://my.oschina.net/are1OfBlog/blog/420034 摘要 现在很多社交、...
    JJO阅读 9,598评论 4 19
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,205评论 4 61
  • 现在感觉自己没有办法静下心来写下一些话,更有点张不开嘴(这里指词穷,在文字方面一枚标准文盲),期末考试来了,我的借...
    最缺的是气质阅读 1,046评论 0 0