2016-08-25 3 views

답변

1

는 여기에 내가했던 일이야 :

[self pingLocation];//viewDidLoad 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 

    [manager stopUpdatingLocation]; 
    manager.delegate = nil; 
    self.currentLocation = (CLLocation *)[locations lastObject]; 

} 

- (void) pingLocation { 
    [locationManager startUpdatingLocation]; 
    locationManager.delegate = self; 
    [self performSelector:@selector(pingLocation) withObject:nil afterDelay:0.5];//change to whatever you want 
} 

이 상당히 좋은 결과를 내게 줄 듯하고 초에 한 번 이상 업데이트 할 수 있습니다. 그러나 배터리가 매우 많이 소모되고 모범 사례가 아닙니다. 나는 너 자신에게 물을 것이다. 왜 이것을 원하니? 초당 두 개 이상의 업데이트가 정말로 필요합니까?

편집 : 나는 이것을 다시 시험해 보았습니다. 그리고 나는 그것이 0.5 초마다 업데이트 되더라도 실제로는 그렇지 않다고 믿습니다. 예를 들면 다음과 같습니다에 따라서

30.00000, 60.00000

30.00000, 60.00000

30.00032, 60.00056

30.00032, 60.00056

, 당신이 정말로 빨리 초 이상 업데이트 할 수 없습니다, 죄송합니다 말하다. CLLocation.startUpdatingLocation 문서에 따르면

+0

불행히도 당신이 옳은 것처럼 보입니다. 나는 타이머로 테스트를 재 작성했다. 관리자에게 현재 위치를 더 자주 요청했지만 업데이트를 위해 기다리지 않았습니다. 이상한 접근법 인 것 같습니다. 고속 위치에서 극적으로 변할 수 있습니다. 나의 목표는 10 미터와 같은 호스트 거리를 측정하는 것이 었습니다. 그래서 시간 간격은 중요했습니다. – famer

1

: 연속이 방법을 여러 번 호출

는 새로운 이벤트에 자동이 아닌 결과가 생성되지 않습니다. 그러나 사이에 stopUpdatingLocation을 호출하면이 메서드를 호출 할 때마다 다음 초기에 새 초기 이벤트가 전송됩니다.

아마도 distanceFilter도 none으로 설정해야 할 것입니다. 그러나이 두 가지가 배터리를 통해 휘젓는 데 도움이된다고 상상해보십시오.

+0

불행히도, 그것은 위치 자체를 업데이 트하지 않는 것 같습니다, 나는뿐만 아니라 아래의 답변에서 그것을 시도하고 그것은 여러 번 동일한 위치를 보냅니다. 내가 시도하지 않은 것은'distanceFilter'를 none으로 설정하는 것입니다. 왜냐하면 불가능하기 때문에 그냥 설정하지 않기 위해서입니다. – famer

+0

'none'이라고 말하면 설정하지 않는다는 의미는 아니며 'kCLDistanceFilterNone' – Michael

0
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    [locationManager startUpdatingLocation]; 
} 

이렇게하면 위치 관리가 더 자주 업데이트됩니다. 왜냐하면 업데이트를받을 때마다 다른 위치를 자주 요청하기 때문입니다.