iOS didUpdateLocations停止

时间:2015-07-10 12:06:32

标签: ios xcode

我希望每秒跟踪用户移动情况并在Google地图上显示。为此,我使用以下代码。但是这段代码每秒都会激活多次。

首先,我想每秒停止对方法的多次调用。然后,当我在某个位置暂停5分钟时,它应该跟踪相同的纬度和经度,并插入到我的位置数组中 - 我需要,当用户不走几分钟时(相同的纬度和经度不立即输入我的位置数组。)

CODE:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    //NSLog(@"didUpdateLocations");


    for (CLLocation *newLocation in locations) {
    //NSLog(@"in foor loop");
    NSDate *eventDate = newLocation.timestamp;

    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];

    if (fabs(howRecent) < 10.0 && newLocation.horizontalAccuracy < 20) {
        // update distance
        if (self.locations.count > 0) {
            self.distance += [newLocation distanceFromLocation:self.locations.lastObject];

            CLLocationCoordinate2D coords[2];
            coords[0] = ((CLLocation *)self.locations.lastObject).coordinate;
            coords[1] = newLocation.coordinate;
            MKCoordinateRegion region =
            MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 500, 500);

           // [self.delegate updateRegion:region withOverLayCoordinates:coords];
        }

        [self.locations addObject:newLocation];
       // NSLog(@"self.locations:: %@",self.locations);
     }
  }
}

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

[locationManager stopUpdatingLocation];

使用此语法停止位置管理器更新。

答案 2 :(得分:0)

问题是,您的实施是基于定时地理位置收集,但这不是Apple希望您做的事情。原因如下:

想象一下,你有三个应用程序在后台运行,收集你的位置并采取行动 - 你正在一个城市中行走,有foursquare,步跟踪器和谷歌地图导航。假设所有人都会每秒请求你的位置。这会在几分钟内耗尽电池。相反,方法是,当位置发生变化时,订阅所有应用程序以接收更新以使用它。这就是为什么你会收到如此多的更新 - 因为它在运动过程中会迅速变化。

第一个很容易修复 - 只需将时间存储在局部变量中,并忽略该给定间隔内的所有其他更新。第二个是非常棘手的。我知道这不是一个好消息,但你必须找到一种方法来结合后期处理和Apple的方法 - 例如从现在到最后一次收到更新之间的秒数重复相同的位置。因为目前没有办法问 - “嘿,每秒都给我发一次更新”。