美文网首页ios 开发iOS&Xcode奇技淫巧Mark
无论你在哪里,我都要找到你!(iOS-CoreLocation)

无论你在哪里,我都要找到你!(iOS-CoreLocation)

作者: 伯恩的遗产 | 来源:发表于2015-04-19 14:22 被阅读3042次

CoreLocation

1.定位

使用步骤:

  • 创建CLLocationManager示例,并且需要强引用它
  • 设置CLLocationManager的代理,监听并获取所更新的位置
  • 启动位置更新
_manager = [[CLLocationManager alloc] init];
_manager.delegate = self;
[_manager startUpdatingLocation];

由于在iOS8中,需要开发者主动向系统请求授权,所以在iOS8及以上系统中,需要以下步骤:

  • info.plist文件中设置NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription
  • 在代码中使用[_manager requestWhenInUseAuthorization]请求授权
  • 实现Manager的代理方法didChangeAuthorizationStatus:,根据状态判断是否启动位置更新

参数分析

在Manager的代理方法locationManager: didUpdateLocations:中,其传入的locations参数是CLLocation类型。

CLLocation方法的主要参数:

//经纬度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
//海平面
@property(readonly, nonatomic) CLLocationDistance altitude;
//速度
@property(readonly, nonatomic) CLLocationSpeed speed
//当前时间戳
@property(readonly, nonatomic, copy) NSDate *timestamp;

2.方向

使用步骤

和定位一样的三个步骤,不同的是获取方向不需要授权

_manager = [[CLLocationManager alloc] init];
_manager.delegate = self;
[_manager startUpdatingHeading];

参数分析

在Manager的代理方法locationManager: didUpdateHeading:中,其传入的newHeading参数是CLHeading类型。

CLHeading方法的主要参数:

//与磁北方向的偏角
@property(readonly, nonatomic) CLLocationDirection magneticHeading;
//与正北方向的偏角
@property(readonly, nonatomic) CLLocationDirection trueHeading;

3.区域监听

使用步骤

也需要大致三个步骤,其中前两个步骤和定位一样,第三个步骤是创建一个范围:

_manager = [[CLLocationManager alloc] init];
_manager.delegate = self;
    
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
   [_manager requestAlwaysAuthorization];
}
    
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(32.656688, 110.74677);
CLCircularRegion *circular = [[CLCircularRegion alloc] initWithCenter:coordinate radius:1000 identifier:@"bourne"];
[_manager startMonitoringForRegion:circular];

代理方法(一进一出)

//进入范围时调用
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"我进来了!");
}

//离开范围时调用
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    NSLog(@"我出去了!");
}

HELP:在iOS8.3中好像没作用,真机和模拟器都不行,iOS7.1正常工作!我也不知道怎么回事儿,如果有人知道希望能告诉我一下。谢谢。

4.地理编码 & 反地理编码

所谓地理编码就是你给他一个地名,它返回给你此地的经纬度等信息;反地理编码就是你给他一个经纬度,它返回给你一个地名。如果没用到定位功能就不需要授权。

地理编码

_coder = [[CLGeocoder alloc] init];
[_coder geocodeAddressString:@"湖北汽车工业学院" completionHandler:^(NSArray *placemarks, NSError *error) {
   CLPlacemark *marks = placemarks.firstObject;
   NSLog(@"%f - %f", marks.location.coordinate.latitude, marks.location.coordinate.longitude);
}];

CLPlacemark中有很多可用的属性,大家可以进去看看。

反地理编码

CLLocation *loc = [[CLLocation alloc] initWithLatitude:32.656688 longitude:110.74677];
[_coder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
   for (CLPlacemark *mark in placemarks) {
       NSLog(@"%@", mark.name);
   }
}];

实现起来比较简单,关键在于如何使用这些数据!

扩展

CoreLocation使用起来还是比较麻烦的,需要授权,判断系统版本等等,所以一边推荐使用第三方框架,比如:LocationManager就很不错,使用Block,十分简单!

相关文章

  • 无论你在哪里,我都要找到你!(iOS-CoreLocation)

    CoreLocation 1.定位 使用步骤: 创建CLLocationManager示例,并且需要强引用它 设置...

  • 无论你在哪里,我都要找到你

    桃蛋,又叫桃之卵。它是非常萌的一款多肉。 我非常喜欢桃蛋。 我有十余盆桃蛋。 今天下午,我看见年前栽的三盆桃蛋长得...

  • 无论你跑到哪里,我都要找到你

    8月底,脑子发热在大润发超市门口买了一辆台铃牌的电动车。 为什么说脑子发热呢?事后才明白,这种没有固定销售门店的卖...

  • 无论你站在哪里

    无论你站在哪里你都要找到你的方向梦想到达哪里脚步到达哪里你会发现梦想的方位就是你站的位置

  • 倘若今生无论去向哪里,都要遇到你

    从X国回来后,应朋友之邀,写一篇关于京城寺庙的文章。 我想也没想,就答应了。 比起驾车,我更钟爱乘坐公共交通。 一...

  • 寻找秋天

    秋天在哪里 怀着无尽的欣喜 到处寻找秋天的踪迹 无论你藏在哪里 都要找到你 秋天藏在红枫林里 你是这样钟情于枫叶 ...

  • 无标题文章

    总是走不出你的影子 无论走到哪里 都有你在 就连梦里 都能看到你笑 听到你说 闻到你的气息 你是在我身边的 信中,...

  • 诗歌《生死不离》 现代·王平久

    生死不离,你的梦落在那里 想着生活继续 天空失去美丽,你却等待明天站起 无论你在哪里,我都要找到你 血脉能创造奇迹...

  • 自由的清理

    无论走到哪里,都要说:Aloha,我来了! 无论走到哪里,都要说:谢谢你,我爱你 无论走到哪里,都要学会一句当地的...

  • 寸铁千元征文|无论你在哪里,我都要找到你

    文/佳人如玉 参赛编号:696 任容颜衰老,岁月蹉跎,你是我此生不变的牵挂。 任千山万水,沧海桑田,你是...

网友评论

  • Mars飘殇:相见恨晚啊,要是当初我做地图定位的时候看到就爽了,不过提个意见,用CLLocationManager和MapView结合定位比较好,因为MapView定位比CLLocationManager准 :kissing_heart:
    Mars飘殇:@橡果736 互相学习
    9ae0682726c6:@Mars飘殇 谢谢你的分享
  • 庸者的救赎:如果把模拟器的经纬度改成custom的就可以了,默认的位置会变成apple公司旧金山的地址所以不能用
  • 我是乔忘记疯狂:知识总结很不错,适合感兴趣的人了解大概后自行深入学习

本文标题:无论你在哪里,我都要找到你!(iOS-CoreLocation)

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