区域监听用到的方法

  • [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 <CoreLocation/CoreLocation.h> @interface ViewController ()<CLLocationManagerDelegate>
/** 位置管理者 */
@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

iOS地图 -- 区域监听的实现和小练习的更多相关文章

  1. 【iOS】7.4 定位服务->2.1.3.3 定位 - 官方框架CoreLocation 功能3:区域监听

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  2. (七十六)CoreLocation(二)获取经纬度、速度、方向,进行区域监听

    上节说明了如何在iOS7和iOS8上完成授权,并且开始获取位置,这一节介绍获取位置信息的方法. [定位精度] 定位精度有多种选择:根据字面意思即可理解 extern const CLLocationA ...

  3. 类似吸顶功能解决ios不能实时监听onscroll的触发问题

    问题:近期项目需要一个类似西东功能,当页面向上滚动160px后div固定在顶部 解决方法:首先,想到的是window.onscroll方法 .fixed{position:fixed;-webkit- ...

  4. iOS 键盘的监听 调整view的位置

    iOS在处理键盘的出现和消失时需要监听UIKeyboardWillChangeFrameNotifications/UIKeyboardDidHideNotifications - (void)vie ...

  5. IOS开发:监听来电状态的改变。

    #import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h> @property(nonato ...

  6. 【iOS】通知监听

    下例为:监听文本框  accountField  内容的改变, 当发生改变时, 调用textChange方法(多次).监听结束需要移除通知. - (void)viewDidLoad { [super ...

  7. iOS: 使用KVO监听控制器中数组的变化

    一.介绍: KVO是一种能动态监听到属性值的改变的方式,使用场景非常广泛,这里我只讲如何监听控制器ViewController中数组的变化. 二.了解: 首先我们应该知道KVO是不能直接监听控制器Vi ...

  8. ios应用来电监听

    先导入这两个头文件,库文件不用导可以 #import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h&g ...

  9. 移动端(IOS)iframe监听不到 onscroll 事件

    问题描述: 我在一个页面A中有瀑布流,点击瀑布流中的图片需要进入到另外一个页面B,点击返回需要回到页面A中点击的位置,为了实现该效果所以在页面A中嵌入iframe,iframe指向页面B,页面B中同样 ...

随机推荐

  1. eclipse — Failed to load the JNI shared library”……\jvm.dll问题原因以及解决方案

    首先上一张出现问题的图片: 出现这个问题一般是你的jdk和eclipse不是同一位的,比如你的jdk是32位的但是eclipse下载的是64位的就会导致这种问题. 解决方案:把两者都换为32或者64位 ...

  2. iOS之UIScrollView循环滚动

    #import "ViewController.h" #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #d ...

  3. 自定义 URL Scheme 完全指南(转载)

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...

  4. ASP.NET MVC3 Razor 调试与预加载

    目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载   在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...

  5. Nagios监控平台搭建

    Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, ...

  6. [WPF系列]-Prism+EF

      源码:Prism5_Tutorial   参考文档 Data Validation in WPF √ WPF 4.5 – ASYNCHRONOUS VALIDATION Reusable asyn ...

  7. 开放api接口签名验证

    不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...

  8. 快速排序(python实现)

    算法导论上的快速排序采用分治算法,步骤如下: 1.选取一个数字作为基准,可选取末位数字 2.将数列第一位开始,依次与此数字比较,如果小于此数,将小数交换到左边,最后达到小于基准数的在左边,大于基准数的 ...

  9. HDU 5183 Negative and Positive (NP) --Hashmap

    题意:问有没有数对(i,j)(0<=i<=j<n),使得a[i]-a[i+1]+...+(-1)^(j-i)a[j]为K. 解法:两种方法,枚举起点或者枚举终点. 先保存前缀和:a1 ...

  10. POJ3250[USACO2006Nov]Bad Hair Day[单调栈]

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17774   Accepted: 6000 Des ...