Я играю с Corelocation и iBeacons. У меня есть уведомления, вызванные при входе и выходе из региона, и я могу варьировать маяки и т. Д. Это все хорошо.Контролирующий вид с близостью iBeacon
Однако я попадаю в беспорядок. Я хочу загрузить второй вид рядом с конкретным маяком, а затем закрыть этот вид, когда мы отодвинемся от этого маяка, промойте и повторим для второго маяка.
я борюсь с:
как остановить вызывая изменение зрения, поскольку в пределах не останавливается. Если я вручную остановлюсь на ранжировании или использую bool для проверки, если я уже нахожусь во втором представлении, это нормально, но кажется беспорядочным.
Как закрыть вид, если я уйду от маяка. Для этого я думаю, что я не могу остановить ранжирование, иначе я не знал бы, если я уйду.
Мой код приведен ниже.
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)viewDidAppear:(BOOL)animated {
// Setup Beacon Manager
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
NSUUID *uuid = [[NSUUID alloc]initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"Beacon Region"];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager requestStateForRegion:self.beaconRegion];
self.beaconStatLabel.text = @"StartLocationServices";
//check to see if this is the first time we've run the app
if ([[NSUserDefaults standardUserDefaults] floatForKey:@"tBHasRun"] == 0) {
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"tBHasRun"]; //set the time run to 1
[self performSegueWithIdentifier:@"firstRunSegue" sender:self];
self.beaconStatLabel.text = @"FIRST RUN"; //set the label text
} else {
self.beaconStatLabel.text = @"REPEAT RUN"; //set the label text
}
}
//Looking for and dealing with regions
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
//looking for a region means looking for a beacon or set of beacons that share a UUID
[self.locationManager requestStateForRegion:self.beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
//if we found a region we start ranging (looking for beaocns)
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
self.regionState.text = @"Region Entered";
//we'll also test sending a notification
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Welcome! Go upstairs, bring beer.";
notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
//we have left the region so we'll stop ranging
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
self.regionState.text = @"Region Exited";
//we'll also test sending a notification
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Thankyou for coming. For information on our next MeetUp check our MeetUp page.";
notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
//dealing with individual beacons
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
//once beacons are ranged we enter this method
//we'll grab and log the signal strength of the beacons
for (int i = 0; i < [beacons count]; i++) {
CLBeacon *singleBeacon = [[CLBeacon alloc]init];
singleBeacon = [beacons objectAtIndex:i];
}
//we get the latest beacon in the array - the closest beacon (strongest signal)
CLBeacon *beacon = [[CLBeacon alloc] init];
beacon = [beacons lastObject];
//update the info labels
self.uuidLabel.text = beacon.proximityUUID.UUIDString;
self.majorLabel.text = [NSString stringWithFormat:@"%@", beacon.major];
self.minorLabel.text = [NSString stringWithFormat:@"%@", beacon.minor];
//we store some information about that beacon
NSNumber *beaconMajor = beacon.major; //it's major (group) number
NSNumber *beaconMinor = beacon.minor; //it's minor (individual) number
//we then call the manageBeacon method and pass through the minor, major, and proximity values
[self manageBeaconWithMinor:beaconMinor AndMajor:beaconMajor AtRange:beacon.proximity];
}
- (void)manageBeaconWithMinor:(NSNumber *)minorNumber AndMajor:(NSNumber *)majorNumber AtRange:(CLProximity)proximity {
//in this method we work out what do do based upon the beacon we are connected to and the range
//for this test we'll look for the mint beacon and call a view
if (([minorNumber floatValue] == 59204) && ([majorNumber floatValue] == 33995) && (proximity == CLProximityNear)) {
//we are going to open up content
[[tBGlobalStore sharedInstance]setInContentTrue];
NSLog([[tBGlobalStore sharedInstance] getInContent] ? @"Yes" : @"No");
//the beacon numbers match the beacon we are expecting so we'll call the next screen
[self performSegueWithIdentifier:@"mainToContent" sender:self];
}
}
Дополнительная информация с консоли показывает, что она пытается вызвать просмотр более одного раза.
2013-11-22 15: 24: 56,487 testingBeacons [670: 60b] --- 2013-11-22 15: 24: 56.489 testingBeacons [670: 60b] ----- 2013-11- 22 15: 24: 56.490 testBeacons [670: 60b] Beacon at: 2013-11-22 15: 24: 56.490 testBeacons [670: 60b] 0 2013-11-22 15: 24: 56.491 testingBeacons [670: 60b] имеет RSSI из: 2013-11-22 15: 24: 56.492 тестированиеБиконы [670: 60b] -75 2013-11-22 15: 24: 56.492 тестированиеБаконы [670: 60b] ----- 2013-11- 22 15: 24: 56.493 testBeacons [670: 60b] --- 2013-11-22 15: 24: 56.495 testingBeacons [670: 60b] Предупреждение. Попытайтесь представить, чья точка зрения не находится в иерархии окон! 2013-11-22 15: 24: 56.497 тестированиеБиконы [670: 60b] --- 2013-11-22 15: 24: 56.498 тестированиеБиконы [670: 60b] ----- 2013-11-22 15: 24: 56,498 Испытание на изгиб [670: 60b] Маяк по адресу: 2013-11-22 15: 24: 56.499 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 56.499 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 24: 56.500 испытанияБиконы [670: 60b] -75 2013-11-22 15: 24: 56.500 испытанияБиконы [670: 60b] ----- 2013-11-22 15: Испытание 24: 56.501Биконы [670: 60b] --- 2013-11-22 15: 24: 57.487 ТестированиеБиконы [670: 60b] --- 2013-11-22 15: 24: 57.489 тестированиеБиконы [670: 60b] - ---- 2013-11-22 15: 24: 57.489 testingBeacons [670: 60b] Маяк по адресу: 2013-11-22 15:24: 57.490 ТестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 57.490 ИспытаниеБаконы [670: 60b] имеет RSSI: 2013-11-22 15: 24: 57.491 тестированиеБиконы [670: 60b] -75 2013 -11-22 15: 24: 57.491 Испытание на изгиб [670: 60b] ----- 2013-11-22 15: 24: 57.492 тестированиеБиконы [670: 60b] --- 2013-11-22 15:24: 57.493 testingBeacons [670: 60b] Предупреждение. Попытайтесь представить, чья точка зрения отсутствует в иерархии окон! 2013-11-22 15: 24: 57.495 ИспытаниеБеконов [670: 60b] --- 2013-11-22 15: 24: 57.495 тестированиеБиконы [670: 60b] ----- 2013-11-22 15: 24: 57.496 Тестирование бегемонов [670: 60b] Маяк по адресу: 2013-11-22 15: 24: 57.496 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 57.497 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 24: 57.497 testBeacons [670: 60b] -75 2013-11-22 15:24:57.498 испытанийБиконы [670: 60b] ----- 2013-11-22 15: 24: 57.499 тестированиеБиконы [670: 60b] --- 2013-11-22 15: 24: 57.500 testBeacons [670: 60b] Предупреждение : Попытка представить, чья точка зрения отсутствует в иерархии окон! 2013-11-22 15: 24: 58.488 испытанияБиконы [670: 60b] --- 2013-11-22 15: 24: 58.489 испытанияБиконы [670: 60b] ----- 2013-11-22 15: 24: 58.490 ТестированиеБиконы [670: 60b] Маяк по адресу: 2013-11-22 15: 24: 58.490 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 58.491 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 24: 58.491 испытаниеИзоны [670: 60b] -76 2013-11-22 15: 24: 58.492 тестированиеБаконы [670: 60b] ----- 2013-11-22 15: 24: 58.492 testBeacons [670: 60b] --- 2013-11-22 15: 24: 58.493 testingBeacons [670: 60b] Предупреждение. Попытайтесь представить, чья точка зрения не находится в иерархии окон! 2013-11-22 15: 24: 58.494 испытанияБиконы [670: 60b] --- 2013-11-22 15: 24: 58.495 испытанияБаконы [670: 60b] ----- 2013-11-22 15: 24: 58.496 ТестированиеБаконы [670: 60b] Маяк по адресу: 2013-11-22 15: 24: 58.496 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 58.497 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 24: 58.497 испытанияБиконы [670: 60b] -76 2013-11-22 15: 24: 58.498 испытанияБиконы [670: 60b] ----- 2013-11-22 15: 24: 58.499 testBeacons [670: 60b] --- 2013-11-22 15: 24: 58.500 testBeacons [670: 60b] Предупреждение: попытайтесь представить, чей взгляд не в иерархии окон! 2013-11-22 15: 24: 59.488 испытанияБиконы [670: 60b] --- 2013-11-22 15: 24: 59.489 испытанияБаконы [670: 60b] ----- 2013-11-22 15: 24: 59.489 ТестированиеБаконы [670: 60b] Маяк по адресу: 2013-11-22 15: 24: 59.490 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 59.490 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 24: 59.491 испытаниеБиконы [670: 60b] -75 2013-11-22 15: 24: 59.491 тестированиеБиконы [670: 60b] ----- 2013-11-22 15: 24: 59.492 testBeacons [670: 60b] --- 2013-11-22 15: 24: 59.493 testingBeacons [670: 60b] Предупреждение: попытайтесь представить, чья точка зрения не находится в иерархии окон! 2013-11-22 15: 24: 59.494 Испытание на изгиб [670: 60b] --- 2013-11-22 15: 24: 59.495 ИспытаниеБаконы [670: 60b] ----- 2013-11-22 15: 24: 59.495 ТестированиеБаконы [670: 60b] Маяк по адресу: 2013-11-22 15: 24: 59.496 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 24: 59.496 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 24: 59.497 испытанияИзоны [670: 60b] -75 2013-11-22 15: 24: 59.498 тестированиеБиконы [670: 60b] ----- 2013-11-22 15: 24: 59.498 testingBeacons [670: 60b] --- 2013-11-22 15: 24: 59.500 testingBeacons [670: 60b] Предупреждение: попытка представить, чья точка зрения не находится в иерархии окон! 2013-11-22 15: 25: 00.487 испытанияБиконы [670: 60b] --- 2013-11-22 15: 25: 00.488 тестированиеБаконы [670: 60b] ----- 2013-11-22 15: 25: 00.489 ТестированиеБаконы [670: 60b] Маяк по адресу: 2013-11-22 15: 25: 00.489 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 25: 00.490 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 25: 00.490 испытанияВиконы [670: 60b] -75 2013-11-22 15: 25: 00.491 testingBeacons [670: 60b] ----- 4444516410617451515053691061745151505369106174588 2013-11-22 15: 25: 00.491 testBeacons [670: 60b] --- 2013-11-22 15: 25: 00.492 testingBeacons [670: 60b] Предупреждение. Попытайтесь представить, чья точка зрения не находится в иерархии окон! 2013-11-22 15: 25: 00.493 тестированиеБиконы [670: 60b] --- 2013-11-22 15: 25: 00.494 тестированиеБаконы [670: 60b] ----- 2013-11-22 15: 25: 00.494 ТестированиеБаконы [670: 60b] Маяк по адресу: 2013-11-22 15: 25: 00.495 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 25: 00.495 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15:25:00.496 Испытания на изгиб [670: 60b] -75 2013-11-22 15: 25: 00.496 тестированиеБиконы [670: 60b] ----- 2013-11-22 15: 25: 00.497 тестированиеБиконы [670: 60b] - - 2013-11-22 15: 25: 00.498 testingBeacons [670: 60b] Предупреждение. Попытайтесь представить, чей взгляд не в иерархии окон! 2013-11-22 15: 25: 01.488 испытанияВаконы [670: 60b] --- 2013-11-22 15: 25: 01.489 тестированиеБаконы [670: 60b] ----- 2013-11-22 15: 25: 01.489 ТестированиеБеконов [670: 60b] Маяк по адресу: 2013-11-22 15: 25: 01.490 testBeacons [670: 60b] 0 2013-11-22 15: 25: 01.490 testBeacons [670: 60b] имеет RSSI : 2013-11-22 15: 25: 01.491 испытаниеБиконы [670: 60b] -72 2013-11-22 15: 25: 01.492 тестированиеБаконы [670: 60b] ----- 2013-11-22 15: 25: 01.492 testBeacons [670: 60b] --- 2013-11-22 15: 25: 01.493 testingBeacons [670: 60b] Предупреждение: попытка представить, чья точка зрения не находится в иерархии окон! 2013-11-22 15: 25: 01.494 испытанияБиконы [670: 60b] --- 2013-11-22 15: 25: 01.495 тестированиеБаконы [670: 60b] ----- 2013-11-22 15: 25: 01.495 ТестированиеБиконы [670: 60b] Маяк по адресу: 2013-11-22 15: 25: 01.496 тестированиеБиконы [670: 60b] 0 2013-11-22 15: 25: 01.497 тестированиеБиконы [670: 60b] имеют RSSI : 2013-11-22 15: 25: 01.497 испытанияБиконы [670: 60b] -72 2013-11-22 15: 25: 01.498 тестированиеБиконы [670: 60b] ----- 444451641061745151505369106174588 2013-11-22 15: 25: 01.498 testingBeacons [670: 60b] --- 2013-11-22 15: 25: 01.499 testingBeacons [670: 60b] Предупреждение. Попытайтесь представить, чья точка зрения не находится в иерархии окон!
Не могли бы вы пояснить, «потому что ранжирование не останавливается»? Вы имеете в виду, что вы в основном видите «мерцание», потому что диапазон Near iBeacon может стать довольно нервным, когда вы на краю? –
Я имею в виду, что даже если вы рядом с маяком, внутри CLProximityNear метод didRangeBeacons является непрерывным. В журнале вы можете увидеть, как он пытается загрузить UIView снова и снова. – mrEmpty
Интересно, поэтому ваши призывы к didEnterRegion и didExitRegion не «сбалансированы»? @mrEmpty –