iOS 地图使用(一)
2015-11-12 本文已影响3031人
iOS_成才录
一、地图的基本使用
- 设置地图类型
// 1.设置地图显示类型
/**
MKMapTypeStandard = 0, // 标准
MKMapTypeSatellite, // 卫星
MKMapTypeHybrid, // 混合(标准+卫星)
MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体卫星
MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体混合
*/
self.customMapView.mapType = MKMapTypeStandard;
- 设置地图的其他属性(操作项)
- 注意:设置对应的属性时,注意该属性是从哪个系统版本开始引入的,做好不同系统版本的适配
// 是否可以缩放
self.customMapView.zoomEnabled = NO;
// 是否可以滚动
self.customMapView.scrollEnabled = NO;
// 是否可以旋转
self.customMapView.rotateEnabled = NO;
// 是否显示3D
self.customMapView.pitchEnabled = NO;
- 设置地图其它属性(显示项)
// 是否显示指南针
self.customMapView.showsCompass = YES;
// 是否显示比例尺
self.customMapView.showsScale = YES;
// 是否显示交通
self.customMapView.showsTraffic = YES;
// 是否显示建筑物
self.customMapView.showsBuildings = YES;
+ 设置地图显示用户位置( 需要请求用户授权 )
- 效果:
+ 会在地图上显示一个蓝色圆点(大头针),`标示用户当前所在位置`, 地图`不会`跟着用户移动而移动
代码: self.customMapView.showsUserLocation = YES;
+ 设置地图的用户追踪模式( 需要请求用户授权 )
- 效果:
+ 会在地图上显示一个蓝色圆点(大头针),`标示用户当前所在位置`, 地图`会`跟着用户移动而移动, 而且自动放大地图到合适比例
- 1.创建CLLocationManager对象请求授权
```objc
-(CLLocationManager *)locationM
{
if (!_locationM) {
_locationM = [[CLLocationManager alloc] init];
if ([_locationM respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationM requestAlwaysAuthorization];
}
}
return _locationM;
}
- 2.设置地图的用户追踪模式
- 注意:
- 设置此属性会使用到用户的位置隐私,所以需要请求用户授权,否则没有效果
```objc
MKUserTrackingModeNone = 0, // 不跟随
MKUserTrackingModeFollow, // 跟随用户位置
MKUserTrackingModeFollowWithHeading, // 跟随用户位置,并跟随用户方向
*/
[self locationM];
self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
```
二、使用
![](https://img.haomeiwen.com/i831339/087b1aba3a7b2edc.png)
- 1.导入框架MapKit.framework
![](https://img.haomeiwen.com/i831339/00892a14da996b58.png)
- 2.进行请求授权,Info.plist文件中配置key
![](https://img.haomeiwen.com/i831339/3d0cabea82c7869b.png)
- 3.布局界面,在控制器的view上拖拽一个mapView控件,用来显示地图
#import "ViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
@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;
}
@end