• MapKit/CoreLocation框架 总结


    MapKit/CoreLocation框架

    /*英译 core:核心 track:踪迹 current:当前 statellite:卫星 hybird:混合  region:范围 annotation:注释  location:位置*/

    导入两个框架

    MapKit.framework  需要地图,精度相对较高

    CoreLocation.framework 不需要地图,精度略差

    包含头文件

    ----------------MapKit,地图操作---------------------

    MapKit操作步骤:

    通过成员_mapView来实现方法

    _mapView:显示一张地图

    //设定地图类型

    [_mapView setMapType];

    //标记用户用户当前位置

    [_mapView setUserLocation];

    //开启用户自动追踪用户位置]

    [——mapView setUserTrackingMode:枚举 animated:YES];

    _mapView代理方法

    //监听用户位置变化(userLocation:用户当前位置)

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

    //添加大头针(注释)MKAnnotation  protocal:协议

    -实例化大头针对象(创建大头针模型,添加协议,定义属性(去掉readOnly))

    #import <MapKit/MapKit.h>

    @interface MyAnnotation : NSObject <MKAnnotation>

    @property (nonatomic, assign) CLLocationCoordinate2D coordinate;

    @property (nonatomic, copy) NSString *title;

    @property (nonatomic, copy) NSString *subtitle;

    @property (nonatomic, copy) NSString *icon;

    @end

    -设置对象属性(coordinate,title,subtitle,icon等

            PS:CLLocationCoordinate2DMake(30, 116);)

    -大头针添加到地图

    [_mapView addAnotation:anno];

    //自定义大头针(重用)类似与tableViewCell的重用

      /* 英译:  resume:重用 identifier:标示符 dequeue:出列 reusable:可重用 callout:插图编号  */

    MKAnnotationView:为可重用大头针视图

    1 判断,如果不是自定义类的大头针 return nil;

    2 查询可重用的大头针来实例化大头针视图(dequeueReusable)

    3 如果大头针视图为nil,新建一个大头针视图并设置重用符,并设置属性接受响应(点击可看见标题啥的)

    4 设置传进来的大头针为视图的大头针

    5 设置大头针视图的图像为传进来的大头针的图像

    6 返回大头针视图

    //跟踪用户位置变化(代理方法 参数:用户当前位置)

     /*英译 coordinate:坐标 */

      //在IOS6中使用跟踪,回直接定位到的位置.IOS7中必须坐标范围(coorinate,经纬度米)

       didUpdateUserLocation:(MKUserLocation *)userLocation

    userLocation:有两个属性:经,纬度

    //计算两个经纬度之间的距离(导入CoreLocation框架) 英译 distance:距离

    应用摇一摇(微信)

    初始化两个CLLocation

    [location1 distanceFromLocation:location2];

    ---------------location,操作演练-------------------

    /* geocoder:地理编码 reverse:反转 placeMark:地标 */

    使用定位服务操作流程:

    1 初始化定位管理者(CLLocationManager)

    2 判断定位服务是否可用(类方法)

       ([CLLocationManager locationServicesEnabled])

    3 开启更新用户位置

      [_locationManager startUpdatingLocation]

    4 实现更新位置方法(代理方法)

     didUpdateLocations:(NSArray *)locations

     locations[0]:用户当前的位置信息经纬度,速度啥的

    5 地理编码器(CLGeocoder)

       作用: 经纬度<->地名

    步骤:

     -实例化地理编码器

     -经纬度->地名reverseGeocodeLocation

     -地名->经纬度geocodeAddressString

     块代码中placeMarks也是数组

    //块代码生动解释

    块代码是一组预先定义好的程序,可以作为参数被传递,在需要的时候被执行

    使用场景,一个类给另一个类传数据,发送数据类的方法中,中包含了要传送的数据,但是方法实现的结果没有,所以要给方法添加一个block参数,来传递数据

    1: 定义block,作为参数添加到方法

    2: 定义block类型的成员变量保存block参数()

    3: 判断成员变量block是否为空,传进block参数值(数组/字典..)

    4: 调用方调用就能得到参数值了!~~

    定义的数组程序,作为参数,传给下家!~~ 

    方法中添加block为参数,建立成员变量保存block参数,把数组赋值给成员变量block,并执行,谁调用了方法,block中储存的之久传给了谁!~~

    //MVC模式示意图:

    Controller->View

    |

    Model->Services

              |

            DB/Networking

    ---------------天气小项目---------------

    POST请求

    URL:XML显示页面URL路径

    数据体:火狐拦截的

    发送异步请求,获取Data(XML的数据)

    /* Parser:解析  */

    -----解析XML数据步骤------

    1:实例化XML解析器并添加Data(NSXMLParser)

    2:设置代理

    3:开启解析器[parser parse]

    4:实现六个代理方法

    创建成员变量,字符串,数组

    --"开始文档"(DidstartDucument)

    {

    判断为空,实例化可变字符串

    判断为空,实例化可变数组

    }

    --"开始节点"(DidStartElement 参数:elementName节点名字)

    {

    判断如果字符为开始的数组字符,清空可变数组;清空字符串(非在判断下)

    }

    --"发现节点内容"(foundCharacters 参数:string被发现的字符串)

    {

    成员变量字符串appendString:sting

    }

    --"结束节点"(didEndElement)

    {

    判断字符是否为string(看是不是string,是,节点就可以结束了)

    将内容添加进可变数组

    }

    --"结束文档"

    {

    将可变数组转化为模型,如果需要可以用block传走

    }

    --"处理错误"(parseErrorOccurred)//Occurred:发生 localize:局部化

    {

    打印错误parseError.localizeDescription

        [数组 removeAllObjects];//清理

        [字符串 setString:@""];

    }

    PS:XLM解析,就是依次将每条节点的内容填进可变数组,数组转化为模型,

    可变字符串用来拼接节点内容,可变数字用来贮存节点内容!~~

    ------------------------------

    补充


    1 修改弹框内容

    1 info plist添加 private location 后面写话
    2 bundle identifi 更改

    删除软件 clean

    location 包含经纬度 时间

    模拟器设置
    //设置模拟器在哪(当前位置) 模拟你走了多远
    product-》Debug-》simulate location

    //设置模拟器启动在那里(启动位置)

    product-》Scheme-》Edit Scheme-》Options
    -》“勾选allow LocationSimulate”default后面设置

    //Resource-》 CPX File(描述位置)-》创建一个xml文件
    文件中就有 经纬度 你可更改/模拟你的位置


    //获取当前用户的位置(经纬度)
    代理方法
    - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
    ios6:
    //跟踪地图位置
    [_mapView setUserTrackingMode:枚举];
    直接定位到细节位置

    ios7:
    //跟踪地图位置
    [_mapView setUserTrackingMode:枚举];

    再加上显示周边信息方法
    [mapView setRegion:枚举 animated:YES];
    才能直接定位到详细位置

  • 相关阅读:
    C# Stream篇(—) -- Stream基类-----转载
    C# Stream篇(三) -- TextWriter 和 StreamWriter---转载
    C#文件过滤器filter---转载
    微信列表展示与详情页
    关于微信表单添加与图片上传
    登录的php代码 接口开发
    文章列表与点赞的一些功能实现 以及详情页点赞、取消赞操作
    Linux 简单命令总结
    微信小程序实现登录功能 (第一种模式)
    201509-1 数列分段 Java
  • 原文地址:https://www.cnblogs.com/ly1973/p/5394451.html
Copyright © 2020-2023  润新知