zoukankan      html  css  js  c++  java
  • iOS9下的Map Kit View下的使用

      最近有个任务是关于地理位置上的标注开发,经过一些资料的查找和对比,现总结一些经验,给读者也是给自己。

      iOS9下的Map Kit View实际是以前MapKit,只不过换了一个名字,实际是指同一个UI控件,当然Map Kit View在经过几代的发展,已经有不少新功能,为了节省时间,从storyboard上开发。

    之后在设置的General上的Link Framework and Libraries添加MapKit.framework和CoreLocation.framework,iOS8之后的MapKit开发都需要添加CoreLocation.framework,因为apple对用户隐私作出了保护,需要适配才可使用MapKit

    UI的布局如上图所示,一个Map Kit View和UIButton

    在文件结构上,首先创建一个类MyAnnotation,继承自NSObject,因为大头针是由MKAnnotation控制的,所以也需要在后面加一个协议<MKAnnotation>,按住Command点击进去,会发现一个必须用的属性,还有两个可选的属性,不要忘记import MapKit头部

    #import <Foundation/Foundation.h>
    #import <MapKit/MapKit.h>
    
    @interface MyAnnotation : NSObject <MKAnnotation>
    
    @property (nonatomic, assign) CLLocationCoordinate2D coordinate;
    
    @property (nonatomic, copy) NSString *title;
    
    @property (nonatomic, copy) NSString *subtitle;
    
    @end
    

     .m文件闲置即可

    让我们回到ViewController.m上

    导入MapKit和CoreLocation、MyAnnotation文件,加上MapKitViewDelegate和CLLocationManagerDelegate协议,将storyboard上的Map Kit View拖拉到该文件上,同时UIButton也绑定Action方法,最后,需要创建CLLocationManager成员变量,为的是能在iOS8之后能使用地理位置,代码如下:

    #import "ViewController.h"
    #import "MyAnnotation.h"
    #import <MapKit/MapKit.h>
    #import <CoreLocation/CoreLocation.h>
    
    @interface ViewController () <MKMapViewDelegate , CLLocationManagerDelegate>
    
    @property (weak, nonatomic) IBOutlet MKMapView *mapView;
    
    - (IBAction)addAnnotation;
    
    @property (nonatomic ,strong) CLLocationManager *manager;

    之后添加各种代理方法,使得大头针能在地图上显示

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
    - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation  

    iOS8之后,Apple的策略改变,获取地址需要经过用户允许

    info.plist的操作网上很多教程,要引出地址使用,需要做判断,代码如下:

      CLLocationManager *manager = [[CLLocationManager alloc] init];
        _manager = manager;
        if ([CLLocationManager locationServicesEnabled]) {
            _manager.desiredAccuracy = kCLLocationAccuracyBest;
            _manager.distanceFilter = 1000;
            _manager.delegate = self;
            if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
                [self.manager requestAlwaysAuthorization];
            } else {
                [self.manager startUpdatingLocation];
            }
        }

    之后下面的方法才生效,不然看不到自己目前的位置

    - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation  

    一般这样设置后,Map Kit View已经能使用,更多高级的用法等我的项目完成后和大家分享,并如何避免入坑。

    
    
  • 相关阅读:
    【Matlab】把一年中的某一天(从1月1日起)换算成日期
    【工具】用hexo搭建博客
    【工具】文献分析工具histcite的简单使用
    【工具】用PPT排版打印海报时图片分辨率问题
    【工具】PPT插入高清图片保存后图片变模糊的解决方法
    【工具】排版软件TeX Live 2016的简单使用
    【工具】文字识别软件(OCR) ABBYY Finereader 11简单使用
    【Matlab】编程风格摘录
    【信号】用matlab实现一维信号的高斯滤波
    【GMT5】用GMT绘制测高卫星Topex_Poseidon_Jason的地面轨迹
  • 原文地址:https://www.cnblogs.com/sasuke6/p/4942672.html
Copyright © 2011-2022 走看看