2015-07-10 84 views
0

我想每秒跟蹤用戶移動並在Google地圖上顯示它。爲此,我使用下面的代碼。但是這段代碼每秒都會觸發多次。iOS didUpdateLocations停止

首先,我想停止每秒多次調用該方法。然後,當我在某個位置暫停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); 
    } 
    } 
} 
+0

有沒有答案讓你朝着正確的方向?它有幫助你嗎? – Michal

回答

0
[locationManager stopUpdatingLocation]; 

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

0

問題是,你的實現是基於定時地理位置聚集,但這不是蘋果希望你做的。這是爲什麼:

想象一下,你有三個應用程序在後臺運行,收集你的位置並採取行動 - 你在一個城市中行走,有四方,步跟蹤和谷歌地圖導航。假設他們所有人都會每秒要求你的位置。幾分鐘之內就會消耗電池。相反,方法是,所有的應用程序訂閱接收更新,當位置發生變化時,使用它。這就是爲什麼你會收到如此多的更新 - 因爲它在移動過程中會迅速變化。

第一個很容易修復 - 只需將時間存儲在局部變量中,並忽略該給定時間間隔內的所有其他更新。第二個是非常棘手的。我知道這不是什麼好消息,但是你必須找到一種方法來結合後處理和蘋果的方法 - 例如,複製同一位置的次數與現在和上次收到更新之間的秒數相同。因爲目前沒有辦法問 - 「嘿,每秒給我發一次更新」。