zoukankan      html  css  js  c++  java
  • 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];
    才能直接定位到详细位置

  • 相关阅读:
    codeforces 616B Dinner with Emma
    codeforces 616A Comparing Two Long Integers
    codeforces 615C Running Track
    codeforces 612C Replace To Make Regular Bracket Sequence
    codeforces 612B HDD is Outdated Technology
    重写父类中的成员属性
    子类继承父类
    访问修饰符
    方法的参数
    实例化类
  • 原文地址:https://www.cnblogs.com/ly1973/p/5394451.html
Copyright © 2011-2022 走看看