MapKit的基本使用

作者: IIronMan | 来源:发表于2016-07-02 17:16 被阅读1677次

题外话:先学习CoreLocation的原因是:MapKit有一部分知识是基于CoreLocation,所以前面必须先了解CoreLocation

注意事项:

  • 导入头文件<MapKit/MapKit.h>
  • Mapkit框架里面的所有的数据类型的前缀都是以MK开头的
  • MapKit有一个比较重要的UI控件:MKMapView ,专门用于地图显示

地图显示的概括:(导入框架<MapKit/MapKit.h>)

  • 1.把地图放在view上

  • 2.设置地图显示类型

     /*
     MKMapTypeStandard  标准类型
     MKMapTypeSatellite, 卫星图
     MKMapTypeHybrid, 混合的图(标准+卫星)
     MKMapTypeSatelliteFlyover
     MKMapTypeHybridFlyover
     */
    
跟踪类型
  • 3.请求获取用户获取地理位置权限(需要在info.plist里面进行配置)

    [self.locationManger requestAlwaysAuthorization];
    
    配置代码:NSLocationAlwaysUsageDescription
    
  • 4.追踪用户的位置(这样才可以显示大头针,也就是地图上蓝色的小点点)

     /*
    
      MKUserTrackingModeNone = 0, 不追踪,不准确
      MKUserTrackingModeFollow, 追踪
      MKUserTrackingModeFollowWithHeading,  追踪并且获取用户方向
    
     */
    
  • 5.给MKMapView的对象挂代理,当在4中追踪到用户的位置之后就会调用下面的方法

     -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
     {
    
     }
    
mapView的代理方法
  • 6.点击大头针显示用户的位置信息(这步操作是在第5步里面的方法中完成的)
    提示:只要用户的地理位置发生改变下面的方法才会被调用,位置不发生改变就不会被调用
   -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
   {

     6.1 利用反地理编码,利用用户的经纬度来获取用户的位置名字,首先要在外面建立一个CLGeocoder *geocoder对象   
    
     6.2 调用一个方法(如下图):userLocation是大头针模型
   
         第一个参数直接是用户的位置:userLocation.location

        [self.geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
    
           CLPlacemark *placekmark = [placemarks firstObject];
    
           userLocation.title = placekmark.name;
           userLocation.subtitle = placekmark.locality;
    
        }];
      6.3 效果如下图


   }
6.2调用的方法 6.3反地理编码之后的值 关于打大头针的知识

具体的代码如下:

提示:(运行下面的代码之前记得在info.plist里面进行权限配置)
#import "ViewController.h"
#import <MapKit/MapKit.h>
@interface ViewController ()<MKMapViewDelegate>

@property(nonatomic,strong) MKMapView *mapView;

@property(nonatomic,strong)  CLLocationManager *locationManger;

@property(nonatomic,strong) CLGeocoder *geocoder;


@end

@implementation ViewController

//1.显示地图
-(MKMapView *)mapView
{
if (!_mapView) {
    
    _mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];
    
    [self.view addSubview:_mapView];
}

return _mapView;
}

- (void)viewDidLoad {
[super viewDidLoad];

//2.设置地图显示类型
self.mapView.mapType = MKMapTypeStandard;

/*
 
   MKMapTypeStandard  标准类型
   MKMapTypeSatellite, 卫星图
   MKMapTypeHybrid, 混合的图(标准+卫星)
   MKMapTypeSatelliteFlyover
   MKMapTypeHybridFlyover
 
 */

//3用户定位权限跟踪设置

[self.locationManger requestAlwaysAuthorization];

//4.如果想利用MapView获取用户的位置,可以追踪用户的诶之

self.mapView.userTrackingMode = MKUserTrackingModeFollow;

/*
 
 MKUserTrackingModeNone = 0, 不追踪,不准确
 MKUserTrackingModeFollow, 追踪
 MKUserTrackingModeFollowWithHeading,  追踪并且获取用户方向
 
 */

//注意在IOS8里面想要追踪用户的位置,必须自己请求隐私权限

//5.关于地图的一些其他设置

//mapView.rotateEnabled = YES;

/*
 
 scrollEnabled  支持拖动
 
 rotateEnabled  支持旋转
 
 pitchEnabled   支持缩放
 
 */

//mapView.showsUserLocation = YES;

//6.锁定位置直接移动到指定位置

self.mapView.delegate = self;

}

#pragma mark MKMapViewDelegate
/*
 *  每次更新到用户的位置就会调用(调用不 频繁,只有位置改变才会调用)
 *
 *  @param mapView  促发事件的控件
 *
 *  @param userLocation  大头针模型
 *
 */
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
/*
 
  地图上蓝色的点就称之为大头针
  大头针可以拥有标题/子标题/位置信息

  MKUserLocation 大头针是由大头针的模型来确定
 
 */
//6.1设置大头针显示的内容
//    userLocation.title = @"蓝科";
//    userLocation.subtitle = @"牛逼";

//6.2移动地图到用户所在的位置
//获取用户当前所在位置的经纬度,并且设置为地图的中心点
//[self.mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];

//6.3设置地图显示的区域

//获取用户的位置
//    
//    CLLocationCoordinate2D center = userLocation.location.coordinate;
//    
//    //将用户当前的位置作为显示区域的中心点,并且指定需要显示的跨度范围
//    //
//    MKCoordinateSpan span = MKCoordinateSpanMake(100, 100);
//    MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
//    
//    //设置显示区域
//    [self.mapView setRegion:region animated:YES];
//

//利用饭地理编码获取位置之后设置标题


[self.geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
    
    CLPlacemark *placekmark = [placemarks firstObject];
    
    userLocation.title = placekmark.name;
    userLocation.subtitle = placekmark.locality;
    
    NSLog(@"==%@ ==%@",userLocation.title, userLocation.subtitle);
    
}];

}

-(CLGeocoder *)geocoder
{
if (!_geocoder) {
    
    _geocoder = [[CLGeocoder alloc]init];
    
}

return _geocoder;
}

-(CLLocationManager *)locationManger
{

if (!_locationManger) {
    
    _locationManger = [[CLLocationManager alloc]init];
}

return _locationManger;
}

@end
总体结构图

相关文章

  • MapKit的基本使用

    题外话:先学习CoreLocation的原因是:MapKit有一部分知识是基于CoreLocation,所以前面必...

  • 苹果地图(MKmap)

    1.基本调用 导入mapkit framework import new MK...

  • iOS-MapKit文集目录

    前言 MapKit框架的导入 地图展示地图的基本使用-地图显示地图的中级使用-用户追踪地图高级-大头针基本使用地图...

  • iOS地图之MKMapView

    使用MKMapView需要导入Mapkit框架 import 遵守协议

  • iOSMapKit地图简单使用

    一、MapKit框架使用前提 1、导入框架 2、导入主头文件 MapKit框架使用须知: MapKit框架中所有数...

  • MapKit使用

    MapKit基本应用

  • MapKit框架学习

    MapKit是用来显示地图的. MapKit的使用步骤导入框架MapKit导入头文件#import 在story...

  • MapKit框架

    一、MapKit框架使用前提 导入MapKit框架 导入MapKit的主头文件#import 如果是storybo...

  • MapKit展示地图

    MapKit框架使用(初级) 导入框架 导入主头文件 MapKit框架须知 1.MapKit框架数据类型的前缀都是...

  • 地图的基本使用-MKMapView

    地图的基本使用-MKMapView(地图显示) MapKit有一个比较重要的UI控件 :MKMapView,专门用...

网友评论

本文标题:MapKit的基本使用

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