0

该区域监视器的准确性非常差。任何人都可以解决这个问题?我的源代码的存储库在这里:https ://github.com/robert-yi-jones/RegionTrigger

我创建了一个 CLLocationCoordinate2D 变量,它是地图的中心。然后,我根据坐标设置了一个半径为 100 米的区域。

CLLocationCoordinate2D *targetPoint =
        [[CLLocation alloc] initWithLatitude:MapView.centerCoordinate.latitude
                                   longitude:MapView.centerCoordinate.longitude];
targetRegion = [[CLCircularRegion alloc] initWithCenter:targetPoint.coordinate
                                                 radius:300
                                             identifier:@"My Circle Region"];
[locationManager startMonitoringForRegion:targetRegion];

但是,我开始监视的区域似乎运行不正常。

/*
 *  locationManager:didEnterRegion:
 *
 *  Discussion:
 *    Invoked when the user enters a monitored region.  This callback will be invoked for every allocated
 *    CLLocationManager instance with a non-nil delegate that implements this method.
 */
- (void)locationManager:(CLLocationManager *)manager
         didEnterRegion:(CLRegion *)region{
    if ([region.identifier isEqualToString:@"My Circle Region"]) {
        [self showAlertWithTitle:@"Entering a Region"
                         Message:region.identifier];
    }
}

/*
 *  locationManager:didExitRegion:
 *
 *  Discussion:
 *    Invoked when the user exits a monitored region.  This callback will be invoked for every allocated
 *    CLLocationManager instance with a non-nil delegate that implements this method.
 */
- (void)locationManager:(CLLocationManager *)manager
          didExitRegion:(CLRegion *)region{
    if ([region.identifier isEqualToString:@"My Circle Region"]) {
        [self showAlertWithTitle:@"Exiting a Region"
                         Message:region.identifier];
    }
}

只有当坐标切换到距离我的设置区域 6 公里左右的某个地方时,它才会注意到我。

有人有区域监视器示例代码吗?我真的找不到我的错误!

4

1 回答 1

1

我的经验是,这是正常行为。我已经使用区域监控大约 2.5 年了,从 iOS 6 开始,-didExitRegion委托的触发时间比-didEnterRegion. 在 WWDC 2013 期间,Apple 工程师也确认了这种行为。听起来他们并不打算提高退出事件的准确性,而是延迟。根据工程师的说法,操作系统需要更长的时间才能破解您离开的信息,因为它必须完全超出已知 Wifi 网络的范围和新的手机信号塔。确定你已经到达比确定你已经离开要容易得多。

如果只需要 300M 左右来触发您的地理围栏(在 300M 半径之外),我会说您可能在地理围栏的操作范围内。如果您需要比退出时更好的精度,那么您可能必须调用 GPS 芯片以及随之而来的所有工作。希望这些信息有所帮助。

于 2013-09-11T22:55:15.957 回答