我想插入一个计时器,以避免在"远","附近","立即"之间进行更改。状态。
我使用相同的视图"远"和"附近"国家,但我推动一个新的观点立即国家。
因此,对于返回root的直接情况,我通过这样做找到了解决方案:
[self performSelector:@selector(patchSelectorPopToRoot) withObject:nil afterDelay:4];
我怎样才能为"附近"和"远"我是否使用相同的观点?
这是代表:
-(void)beaconManager:(ESTBeaconManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(ESTBeaconRegion *)region
{
// Descriptor on distance to sort the array of beacons by distance
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
// Sorting the array of beacons
// Beacon array is sorted based on distance
// Closest beacon is the first one
self.beaconsArray = [beacons sortedArrayUsingDescriptors:sortDescriptors];
if([self.beaconsArray count] > 0)
{
if(!self.selectedBeacon)
{
// initialy pick closest beacon
self.selectedBeacon = [beacons objectAtIndex:0];
currentBeaconMinor = self.selectedBeacon.minor;
}
else
{
//Sorting the array of beacons
self.beaconsArray = [beacons sortedArrayUsingDescriptors:sortDescriptors];
//Updating the selected beacon with the first element of the array (closest beacon)
if(self.selectedBeacon != [beacons objectAtIndex:0] )
{
self.selectedBeacon = [beacons objectAtIndex:0];
currentBeaconMinor = self.selectedBeacon.minor;
}
}
// Switch on proximity of the closest beacon
switch (self.selectedBeacon.proximity)
{
case CLProximityUnknown:
{
[self DoOnProximityUnknow];
break;
}
case CLProximityImmediate:
{
[self DoOnProximityImmediate];
break;
}
case CLProximityNear:
{
[self DoOnProximityNear];
break;
}
case CLProximityFar:
{
[self DoOnProximityFar];
break;
}
default:
break;
}
self.beaconsArray = [beacons sortedArrayUsingDescriptors:sortDescriptors];
}
}
这是我想使用计时器(近)的方法。
-(void)DoOnProximityNear
{
//Starting a timer
//not working :
//[NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(timerCalled) userInfo:nil repeats:NO];
//not working
/*
double delayInSeconds = 20.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSLog(@"Do some work");
});*/
}
我只想在我的"近"内部使用20秒的计时器。方法。我想在回到之前至少停留20秒"远"。
我应该在哪里插入此计时器?我应该等待远信号,启动定时器并等待另一个远信号,或者当我到达附近时应该启动定时器吗?
请问我该如何解决这个问题?
提前感谢您的帮助。
答案 0 :(得分:1)
在我过去的一项工作中,需要同样的事情。我希望以下之一能帮助你。在我的情况下,我的逻辑基于RSSI(它也经常波动)
方式1 为CLProximityFar和CLProximityNear放置一个计数器,并根据该触发操作,计算相同Proximity的连续出现次数,如果是,则考虑PROximity并触发其动作。
方式2 这完全基于RSSI值。为此,您需要使用10-20个连续RSSI值,取其平均值并根据触发操作。