IOS开发笔记整理49之详解定位CLLocation_IOS

在项目功能中有一个定位CLLocation的需求,遇到了一些知识难点,经过各位大侠的帮助,问题解决,特此分享供大家学习,希望大家共同学习进步。

一、简单说明

1.CLLocationManager

CLLocationManager的常用操作和属性

开始用户定位- (void)startUpdatingLocation;

停止用户定位- (void) stopUpdatingLocation;

说明:当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法

  - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;

每隔多少米定位一次

  @property(assign, nonatomic) CLLocationDistance distanceFilter;

定位精确度(越精确就越耗电)

  @property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

使用定位功能,首先要导入框架,遵守CLLocationManagerDelegate协议,再创建位置管理器CLLocationManager

在iOS8.0后,定位功能需要在info.plist中加入NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription这两个NSString类型字段,才能够使用定位功能

代码贴出来与大家共勉,各位看官自行研究

{
  self.locationManager = [[CLLocationManager alloc] init];
  _locationManager.delegate = self;
  if([CLLocationManager locationServicesEnabled] == NO) {
   //  NSLog(@"没有GPS服务");
  }
  //地理位置精确度
  _locationManager.desiredAccuracy=kCLLocationAccuracyNearestTenMeters;
  //设置距离筛选器,double类型,只要距离变化多少,就调用委托代理
  self.locationManager.distanceFilter = kCLDistanceFilterNone; // meters
  [_locationManager requestWhenInUseAuthorization];// 前台定位
  [_locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager
   didUpdateLocations:(NSArray *)locations
{
  NSLog(@"longitude = %f", ((CLLocation *)[locations
                       lastObject]).coordinate.longitude);
  NSLog(@"latitude = %f", ((CLLocation *)[locations lastObject]).coordinate.latitude);
    CGFloat longTI=((CLLocation *)[locations
                    lastObject]).coordinate.longitude;
    CGFloat latTI=((CLLocation *)[locations lastObject]).coordinate.latitude;
    //将经度显示到label上
    _longitudeLabel.text = [NSString stringWithFormat:@"%f",longTI];
    //将纬度现实到label上
    _latitudeLabel.text = [NSString stringWithFormat:@"%f",latTI];
  // 获取当前所在的城市名
  CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  //根据经纬度反向地理编译出地址信息
  [geocoder reverseGeocodeLocation:locations.lastObject completionHandler:^(NSArray *array, NSError *error)
   {
     if (array.count > 0)
     {
       CLPlacemark *placemark = [array objectAtIndex:0];
//       //将获得的所有信息显示到label上
//       self.location.text = placemark.name;
       //获取城市
       NSString *city = placemark.locality;
       if (!city) {
         //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
         city = placemark.administrativeArea;
       }
      // NSLog(@"city = %@", city);
       _cityName=city;
     }
     else if (error == nil && [array count] == 0)
     {
      // NSLog(@"No results were returned.");
     }
     else if (error != nil)
     {
      // NSLog(@"An error occurred = %@", error);
     }
   }];
  //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
  [manager stopUpdatingLocation];
}

以上是关于小编给大家整理的IOS开发之详解定位CLLocation,后续还会持续更新,希望大家能够喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios_cllocation
下降楔形整理形态详解、上升楔形整理形态详解、中国罗盘49层详解、大一微积分笔记整理、英语笔记整理展示图,以便于您获取更多的相关知识。

时间: 2016-11-27

IOS开发笔记整理49之详解定位CLLocation_IOS的相关文章

Android开发笔记之:Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)_Android

在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助.android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR.1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用

iOS开发:自定义状态栏代码详解

  公司的开发的项目要求在状态栏上边加入程序下载的进度条,之前写的程序,由于是根据ipad的朝向来设置自定义的状态栏的frame,以及子视图的 frame和transform,出现一些不太容易解决的bug.这两天正好项目不太紧,就好好学习一下这方面的知识,以下是我所总结的一点经验: 这里说明一下,Apple没有开放的状态栏的API,在ios 的官方文档没有提到修改Window Level的方式; 先看一下Window Level的可用的值包括: 1: typedef CGFloat UIWind

iOS开发中UIPopoverController的使用详解_IOS

一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤 (1)设置内容控制器 由于UIPopoverController直接继承自NSObject,不具备可视化的能力.因此UIPopover

iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调

UICollectionView的布局是可以自己定义的,在这篇博客中先在上篇博客的基础上进行扩充,我们先使用UICollectionViewFlowLayout,然后好好的介绍一下UICollectionView的一些回调方法,主要包括UICollectionViewDataSource,UICollectionViewDelegateFlowLayout,UICollectionViewDelegate相关回调方法,并通过实例来介绍每个回调的用法.并且给每个Section添加定制的Header

iOS之UIScrollview添加约束图文详解

iOS之UIScrollview添加约束图文详解 原文链接 http://www.jianshu.com/p/e4a12061776d 前言 在iOS开发中,autolayout是一个很强大的东西,用好了,能让你事半功倍,用不好,各种蛋疼.不过autolayout是很容易学的,笔者当时仅仅看了一个多小时的资料就轻松上手,相信比笔者厉害的大有人在. 不过无论多简单的东西,用起来总有不如意的地方,笔者曾经在UIScrollView的约束上折腾了很久,各种报错,各种查资料,终于在笔者不断的尝试下,找到

Android开发入门(一)详解活动 1.6 显示复杂对话框

除了"对话框"进度条,也可以创建一个显示"操作进度"的对话框,例如显示正在下载的状态. 1. 创建一个工程:Dialog. 2. main.xml中的代码. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro

Android开发入门(一)详解活动 1.5 显示进度对话框

当要进行耗时的操作的时候,往往会看见"请稍候"字样的对话框.例如,用户正在登入服务器,此时并 不允许用户使用这个软件,或者应用程序把结果返回给用户之前,要进行某些耗时的计算.在这些情况下, 显示一个"进度条"对话框,能友好地让用户等待,同时也能阻止用户进行某些不必要的操作. 1. 创建一个工程:Dialog. 2. main.xml中的代码. <?xml version="1.0" encoding="utf-8"?&g

Android开发入门(一)详解活动 1.3 隐藏Activity的标题

如果愿意的话,可以把Activity的标题栏给隐藏了.只需要调用requestWindowFeature()方法,同时传递 Window.FEATURE_NO_TITLE常量. public class Activity101Activity extends Activity { String tag = "Lifecycle"; /** Called when the activity is first created. */ @Override public void onCrea

Android开发入门(一)详解活动 1.2 设置Activity的样式和主题

默认情况下,一个activity占据整个屏幕.然而,可以为一个activity设置一个"对话框"主题,这样, 它就能像一个浮动的对话框显示出来了.举个例子,你可能想要把你的activity定义成一个弹出的"对话框 ",通知用户进行一些操作.在这种情况下,显示一个"对话框"样式的anctivity是一个引起用户注意的好 方法.想要给activity设置主题,很简单,只需在AndroidManifest.xml文件中为<application&