我有要求,我必须为CLLocation
设置半径。我已在viewDidLoad
方法中将代码编写为:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager setDistanceFilter:kCLLocationAccuracyBest];
[locationManager startUpdatingLocation];
CLLocationDegrees latitude = 37.33036720;
CLLocationDegrees longitude = -122.02923067;
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(latitude, longitude);
CLLocationDistance radius = 100.0;
CLRegion *region = [[CLRegion alloc]initCircularRegionWithCenter:center radius:radius identifier:@"Apple"];
[locationManager startMonitoringForRegion:region];
}
委托方法如下:
-(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region{
NSLog(@"didStartMonitoringForRegion %@", region);
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"didEnterRegion %@", region);
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"didExitRegion %@", region);
}
我从位置日志中获取了一些静态位置。但方法未调用。
答案 0 :(得分:0)
可能是你的区域半径太小,你没有机会获得准确的拾取。尝试将其从半米扩展。
您也可以尝试设置精度,但半径是您几乎可以肯定的主要问题。
或者可能是
在设备上测试区域监控代码时,要意识到区域事件可能不会在跨越区域边界后立即发生。为防止虚假通知,iOS
在满足某些阈值条件之前不会发送区域通知。具体而言,用户的位置必须越过区域边界并远离该边界移动最小距离,并在报告通知之前保持该最小距离至少20-30秒。
特定阈值距离由当前可用的硬件和定位技术决定。例如,如果禁用Wi-Fi,则区域监控的准确性要低得多。但是,出于测试目的,您可以假设最小距离约为200米。