Я работаю над таким проектом, где приложения сделать следующие вещи:на основе текущего пользователя мониторинга местоположения области, Удалить Контролируемую область в iOS7
- Пользователя выбрать радиус (10 метров до 1000 метров) и перейти к next viewController, нажав кнопку «Перейти»
- Здесь приложения Захватите пользователей текущей позиции и запустите «мониторинг региона» на основе этой текущей позиции с выбранным радиусом
- Если пользователь пересекает эту определенную границу (от 10 метров до 1000 метров), то она выдает предупреждающее сообщение «ExitRegion». И снова начните «мониторинг региона», основываясь на новой новой позиции пользователей. И приложения продолжают делать это все время, как на переднем плане, так и в фоновом режиме. Мне это удается & работает отлично.
Но теперь для ограничения количества регионов, мониторинг «Мониторингом регионов», я хочу удалить каждый «контролируемый регион» после создания нового. Так что это должно произойти, как:
- Начало области мониторинга на основе пользователей текущей позиции
- Выход определенный регион & и получить «Выход Регион» предупредительное сообщение
- Удалить «Контролируемые область» из
stopMonitoringForRegion
массива - Начать снова Регион Мониторинг на основе текущей позиции пользователей
- Выход из определенного региона & и получение сообщения «Выход из региона»
- Исключить этот «контролируемый регион» от
stopMonitoringForRegion
массив
И все должно продолжаться. Я пытаюсь это сделать, но он работает неправильно.
Вот мой код:
-(void)startLocationServices
{
if (self.locationManager == nil)
{
self.locationManager = [CLLocationManager new];
}
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[self.locationManager setDelegate:self];
[self.locationManager setDistanceFilter:kCLDistanceFilterNone];
//[self.locationManager startUpdatingLocation];
}
-(void) monitoringRegion
{
if (flag == 0)
{
if (flagForRemovingRegion == 1)
{
// Remove monitored region from "monitoredRegions" array after monitor 5 regions
[self removingMonitoredRegion];
}
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude);
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:myval identifier:@"Test"];
CLLocationDegrees radius = myval;
if (radius > self.locationManager.maximumRegionMonitoringDistance)
{
radius = self.locationManager.maximumRegionMonitoringDistance;
}
[self.locationManager startMonitoringForRegion:region];
flag = 1;
flagForRemovingRegion = 1;
self.availabilityTextView.text = [@"Your selected Radius:" stringByAppendingFormat:@"%i", self.myval];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
flag = 0;
[self startLocationServices];
[self monitoringRegion];
}
-(void) removingMonitoredRegion
{
[locationManager stopMonitoringForRegion:[[[locationManager monitoredRegions] allObjects] objectAtIndex:0]];
}
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
// // regions are stored by system
self.threeTextView.text = [@"Regions: \n\n" stringByAppendingFormat:@"%@", [[self.locationManager monitoredRegions] allObjects]];
UIAlertView *alertViewOne = [[UIAlertView alloc] initWithTitle:@"Status" message:@"Region Monitoring started." delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alertViewOne show];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
UIAlertView *alertViewTwo = [[UIAlertView alloc] initWithTitle:@"Status" message:@"You Enter the region" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alertViewTwo show];
self.availabilityTextView.text = @"You enter the region!";
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
UIAlertView *alertViewThree = [[UIAlertView alloc] initWithTitle:@"Status" message:@"You Exit the region" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alertViewThree show];
flag = 0;
self.availabilityTextView.text = @"You exit the region!";
[self monitoringRegion];
}
- (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
self.availabilityTextView.text = [@"\nError:" stringByAppendingFormat:@"%@", [error localizedDescription]];
}
Я поставил flagForRemovingRegion
, так что он не будет пытаться удалить «Контролируемые область» в начале приложений. Потому что в начале это NULL. Если кто-нибудь может понять мою проблему или предложить какое-либо предложение, ответьте пожалуйста. Спасибо в Advanced. Хорошего дня.
благодарит за комментарии. Я стараюсь. Поместите '[manager stopMonitoringForRegion: region];' в метод 'didExitRegion' непосредственно перед' [self monitoringRegion]; 'и отправился проверять это, но он не работает. :( – Tulon