一、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(@"地图控件渲染地图完成!");
}
网友评论