如果用户使用以下方法开始移动位置更新,我正在使用寻找路线的地图
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
现在,如果用户停止移动并在同一个地方停留10分钟,我想显示警报。那么如何在上述方法中检查10分钟的间隔?感谢。
答案 0 :(得分:3)
首先,我建议您使用- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
,因为iOS 6.0中已弃用locationManager:didUpdateToLocation:fromLocation:
。然后在这个方法中你可以使用:
(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//Cancel perform requests previously
// registered with the performSelector:withObject:afterDelay:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
//Register new perform request to fire after 10 minutes
[self performSelector:@selector(showAlertOnIdle) withObject:nil afterDelay:600.0];
}
每次在locations
数组中使用新的位置数据时,都会调用此方法。因此,如果用户不断移动选择器将永远不会因为之前的取消而被触发,并且只有在10分钟内没有新的位置数据时才会被调用。
答案 1 :(得分:1)
在您的课程中放置一个NSTimer
对象,让我们这样说idleTimer
:
NSTimer *idleTimer;
正如@Alexander建议的那样,使用didUpdateLocations
这样:
(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//dismiss already running timer as location has been updated..
if (idleTimer) {
[idleTimer invalidate];
idleTimer = nil;
}
//start timer
idleTimer = [NSTimer scheduledTimerWithTimeInterval:600 target:self selector:@selector(idleTimerFired) userInfo:nil repeats:NO];
}
并制作idleTimerFired
方法以显示提醒:
- (void)idleTimerFired {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}