博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS地图 -- 区域监听的实现和小练习
阅读量:5877 次
发布时间:2019-06-19

本文共 3027 字,大约阅读时间需要 10 分钟。

区域监听用到的方法

  • [self.mgr startMonitoringForRegion:region]; --> 开启区域监听,没有返回值,在代理方法中得到信息并且处理信息 注:该方法只有用户位置发生变化的时候,相应的代理方法才会触发
  • [self.mgr requestStateForRegion:region]; -->根据指定区域请求一下用户现在的位置状态(CLRegionStateUnknown, CLRegionStateInside, CLRegionStateOutside),没有返回值,同样也是在代理方法中处理信息 注:该方法在程序一启动就会请求用户的位置状态.同样当用户位置发生变化时,也会触发相应的代理方法
  • - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region --> 进入指定区域后执行的代码
  • - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region --> 离开指定区域后执行的代码
  • - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region --> 在指定区域内确定了状态后触发的代理方法

区域监听的练习以及练习中的细节处理

#import "ViewController.h"#import 
@interface ViewController ()
/** 位置管理者 */@property(nonatomic,strong) CLLocationManager *mgr;@property (weak, nonatomic) IBOutlet UILabel *msgLabel;@end@implementation ViewController#pragma mark - 懒加载- (CLLocationManager *)mgr{ if (_mgr == nil) { _mgr = [[CLLocationManager alloc] init]; _mgr.delegate = self; // 区域监听,监听的是用户,所以应该让用户授权获取用户当前位置 if ([_mgr respondsToSelector:@selector(requestAlwaysAuthorization)]) { [_mgr requestAlwaysAuthorization]; } } return _mgr;}- (void)viewDidLoad { [super viewDidLoad]; // ###细节二:判断设备是否支持区域监听(指定区域类型,一般是圆形区域) if (![CLLocationManager isMonitoringAvailableForClass:[CLCircularRegion class]]) { return; } // 0.给定一个区域 // 0.1 区域的中点坐标 CLLocationCoordinate2D center = CLLocationCoordinate2DMake(22.22, 33.33); // 0.2区域半径 CLLocationDistance distance = 1000.0; // ###细节一:半径有限制 if (distance > self.mgr.maximumRegionMonitoringDistance) { distance = self.mgr.maximumRegionMonitoringDistance; } CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:distance identifier:@"Chaos"]; // 1.开启区域监听 代理中操作 -- 该方法只有用户位置发生了移动才会触发// [self.mgr startMonitoringForRegion:region]; // 1.根据指定区域请求一下监听到的状态 代理中操作 -- 该方法在程序启动就会监听一下用户的位置 // 同样当用户位置发生变化时,也会触发相应的代理方法 [self.mgr requestStateForRegion:region];}#pragma mark - CLLocationManagerDelegate/** * 进入指定区域后指定的代码 * * @param manager 位置管理者 * @param region 指定的区域 */- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{ NSLog(@"进入区域--"); self.msgLabel.text = @"欢迎光临--";}/** * 离开指定区域后执行的代码 * * @param manager 位置管理者 * @param region 指定的区域 */- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{ NSLog(@"离开区域--"); self.msgLabel.text = @"下次再来--";}- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{ /* CLRegionStateUnknown, 不知道 CLRegionStateInside, 进入区域 CLRegionStateOutside 离开区域 */ if (state == CLRegionStateInside) { self.msgLabel.text = @"欢迎光临"; } else if (state == CLRegionStateOutside) { self.msgLabel.text = @"下次再来"; }}@end

转载于:https://www.cnblogs.com/gchlcc/p/5844028.html

你可能感兴趣的文章
判断点是否在三角形内
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>
在odl中怎样实现rpc
查看>>
leetcode 110 Balanced Binary Tree
查看>>
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
看雪CTF第十四题
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Maven 传递依赖冲突解决(了解)
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>