iOS地图 -- 区域监听的实现和小练习
区域监听用到的方法
[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地图 -- 区域监听的实现和小练习的更多相关文章
- 【iOS】7.4 定位服务->2.1.3.3 定位 - 官方框架CoreLocation 功能3:区域监听
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
- (七十六)CoreLocation(二)获取经纬度、速度、方向,进行区域监听
上节说明了如何在iOS7和iOS8上完成授权,并且开始获取位置,这一节介绍获取位置信息的方法. [定位精度] 定位精度有多种选择:根据字面意思即可理解 extern const CLLocationA ...
- 类似吸顶功能解决ios不能实时监听onscroll的触发问题
问题:近期项目需要一个类似西东功能,当页面向上滚动160px后div固定在顶部 解决方法:首先,想到的是window.onscroll方法 .fixed{position:fixed;-webkit- ...
- iOS 键盘的监听 调整view的位置
iOS在处理键盘的出现和消失时需要监听UIKeyboardWillChangeFrameNotifications/UIKeyboardDidHideNotifications - (void)vie ...
- IOS开发:监听来电状态的改变。
#import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h> @property(nonato ...
- 【iOS】通知监听
下例为:监听文本框 accountField 内容的改变, 当发生改变时, 调用textChange方法(多次).监听结束需要移除通知. - (void)viewDidLoad { [super ...
- iOS: 使用KVO监听控制器中数组的变化
一.介绍: KVO是一种能动态监听到属性值的改变的方式,使用场景非常广泛,这里我只讲如何监听控制器ViewController中数组的变化. 二.了解: 首先我们应该知道KVO是不能直接监听控制器Vi ...
- ios应用来电监听
先导入这两个头文件,库文件不用导可以 #import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h&g ...
- 移动端(IOS)iframe监听不到 onscroll 事件
问题描述: 我在一个页面A中有瀑布流,点击瀑布流中的图片需要进入到另外一个页面B,点击返回需要回到页面A中点击的位置,为了实现该效果所以在页面A中嵌入iframe,iframe指向页面B,页面B中同样 ...
随机推荐
- SQL Queries from Transactional Plugin Pipeline
Sometimes the LINQ, Query Expressions or Fetch just doesn't give you the ability to quickly query yo ...
- Thread多线程(二):Runnable
如果要让其他类使用线程就要用到runnable,其他thread就是实现了runnbale接口,其中run()方法就是对runnable接口中的run()方法的具体实现.有两个构造函数分别是: ...
- 带交互的 iOS 产品原型可以用什么软件制作?
摘自知乎http://www.zhihu.com/question/20326729 来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 首先如果你小团队或者个人开发,当然 ...
- android 音乐播放器
本章以音乐播放器为载体,介绍android开发中,通知模式Notification应用.主要涉及知识点Notification,seekbar,service. 1.功能需求 完善音乐播放器 有播放列 ...
- iOS-多线程之GCD(原创)
前言 GCD 全称 Grand Central DisPath NSOperation便是基于GCD的封装 基础知识 1.GCD的优势 (1)为多核的并行运算提出了解决方案 (2)GCD会自动利用更多 ...
- C++算法实源码分析
includes: // TEMPLATE FUNCTION includes WITH PRED template<class _InIt1, class _InIt2, class _Pr& ...
- mysql权限与安全
一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...
- mongo学习笔记(一):增删改查
安装:我是按这篇来弄的 一.Insert 1.db.person.insert({"name":"jack","age":20}) 2.va ...
- 迅为最新推出iTOP-6818开发平台无缝支持4418开发板
iTOP-6818开发板是一款四核ARM 八核开发板与iTOP-4418开发板完全兼容,CPU主频1.4GHz,内存1GB DDR3(2GB可选),存储16GB EMMC,板载千兆以太网,GPS,WI ...
- (转)Doxygen文档生成工具
http://blog.csdn.net/lostaway/article/details/6446786 Doxygen 是一个支持 C/C++,以及其它多种语言的跨平台文档生成工具.如同 Java ...