- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在监视 iOS 中的 iBeacon 和圆形区域。如果我尝试分别定义它们:
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLCircularRegion *)region {}
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLBeaconRegion *)region {}
很明显是重复声明错误。 This SO answer很好地表明,如何区分哪个区域开火。为了做到这一点,我正在尝试弄清楚如何定义每个人都会满意的公共(public)区域退出事件。如果我使用 CLRegion
组合它们,将会出现各种警告:
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
if (region.class == CLCircularRegion.class) {
CLLocationCoordinate2D coordinate = [region center]; // Deprecation warning, use CLCircularRegion instead
// etc...
}
if (region.class == CLBeaconRegion.class) {
[locationManager stopRangingBeaconsInRegion:region]; // Incompatible pointer types warning
// etc...
}
}
我最初使用 didDetermineState
定义了信标处理,但它会导致一些额外的事件。例如。 CLRegionStateOutside
最初会为所有受监控的区域触发,这完全合适,但我不需要知道这一点,所以我宁愿使用 didExitRegion
。
是否有一种正确的方法来编写一个干净的组合 didExitRegion
,以便它可以处理圆形区域和信标区域而不会出现错误或警告?
最佳答案
方法签名由 CLLocationManagerDelegate
协议(protocol)定义,并且是:
- (void)locationManager:(CLLocationManager *)manager
didExitRegion:(CLRegion *)region;
如果要调用该方法,则必须使用此签名。
通过检查您经过的区域类型,您走在了正确的轨道上。你缺少的一点是使用强制转换将 region
分配给适当子类的变量,这样当你尝试做子类特定的事情时就不会收到警告/错误。
请注意,使用 isKindOfClass:
比直接比较类更安全。 isKindOfClass
如果对象是指定类的实例或指定类的子类,则返回 YES
。因此,如果 Apple 进行了一些内部更改并开始向您发送作为 CLBeaconRegion
子类的 CLNewBeaconRegion
对象,您的代码仍然有效。
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
if ([region isKindOfClass:CLCircularRegion.class]) {
CLCircularRegion *circularRegion = (CLCircularRegion *)region;
CLLocationCoordinate2D coordinate = circularRegion.center;
// etc...
} else if ([region isKindOfClass:CLBeaconRegion.class]) {
CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
[locationManager stopRangingBeaconsInRegion:beaconRegion];
// etc...
}
}
关于ios - 如何为 CLCircularRegion 和 CLBeaconRegion 定义组合进入/退出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715625/
我们从 kontakt.io 购买了一些信标,并尝试使用我们的 iOS 应用程序进行基本检测。蓝牙已打开,并且我的应用程序具有“始终”位置权限。我下载了Locate应用程序并输入邻近 UUID(它们都
我一直在阅读有关 CLBeaconRegion 的文章,我已经成功地设置了一些 iBeacons 并让它触发了位置更新,即使应用程序在后台也是如此。 但是,根据我从 CLRegion 阅读和继承的内容
我正在尝试制作范围为 CLBeaconRegion 的应用程序。 我看了来自 WWDC 的视频,主持人说,我应该调用 startMonitoringForRegion,然后用户在区域内,startRa
在尝试实例化 CLBeaconRegion 时,我总是得到 nil 值。 我有以下代码: NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:@"1
我发现一些问题:当我仅使用 UUID 和 identifier 注册 CLBeaconRegion 时,功能: func locationManager(_ manager: CLLocationMa
问题 1: 我正在关注this estimote tutorial创建我自己的 Estimote 应用程序。然而出现了这个错误: Unknown type name 'ESTBeaconRegion'
我的应用程序使用地理围栏以及 iBeacon 监控。我已经设置了一些 CLCircularRegion 以及 CLBeaconRegion 来进行监控。所以每当我到达一个新的信标或新的位置,然后 -
我正在监视 iOS 中的 iBeacon 和圆形区域。如果我尝试分别定义它们: - (void) locationManager:(CLLocationManager *)manager didExi
根据Swift 2.0 documentation对于 CLBeaconRegion , 应该仍然可以传递 peripheralDataWithMeasuredPower: 的输出startAdver
我们有一个项目正在使用 CoreLocation 区域来监控 iBeacon 区域在应用程序后台的进入/退出。 CLBeaconRegion (CLRegion)、CLBeacon 等 CLLocat
Apple 关于监控地理围栏和 iBeacon 区域的共享文档在地理围栏部分中指出,单个应用程序的监控区域限制为 20 个: For this reason, Core Location limits
我是一名优秀的程序员,十分优秀!