我正在构建一个应用程序,特别是一个基于位置的应用程序,所以我需要让用户坐标经度和纬度及其工作。
现在我需要知道用户是否进入了我使用CLLocationManager
委托预定义的某个区域,因此我didEnterRegion
用一个语句覆盖了该NSLog
语句以了解用户是否进入了该区域。
在
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
我称之为,startMonitoringForRegion:
但在像didEnterRegion
或monitoringDidFailForRegion
或任何CLRegion
.
这是我的一些代码:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
locLongittude=newLocation.coordinate.longitude;
locLattiude=newLocation.coordinate.latitude;
self.regionTimer=[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(monitorRegion) userInfo:nil repeats:NO];
}
-(void)startMonitor:(float)latitude longitude:(float)longitude radius:(float)radius
{
CLLocationCoordinate2D home;
home.latitude = latitude;
home.longitude = longitude;
CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:home radius:radius identifier:@"home"];
if([CLLocationManager regionMonitoringEnabled] && [CLLocationManager regionMonitoringAvailable])
[locManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyBest];
NSLog(@"Count: %d region aval %d enable %d",[[locManager monitoredRegions]count], [CLLocationManager regionMonitoringAvailable],[CLLocationManager regionMonitoringEnabled]);
for( CLRegion* region in locManager.monitoredRegions )
NSLog( @"%@", region );
}
-(void)monitorRegion
{
[self startMonitor:31.971160 longitude:35.832465 radius:10000.0];
}
编辑:使用模拟器完成所有测试并使用 Product-> Debug -> Simulate Location 模拟位置
好的,伙计们,它有效。上面的代码很好用,问题是要使didEnterRegion
方法被调用是在您需要输入的区域之外,然后您输入它以使其工作。
我所做的是在模拟中我总是在我需要输入的区域内选择一个坐标,这就是它必须在该区域之外的问题。
所以这是我的代码与您分享
更新:我想知道为什么当我离开该区域时没有调用 didExitRegion ?