2017-02-01 6 views
0

Можно ли вызвать didUpdateLocations внутри Timer? Я имею в виду ...Таймер на локаторе

_timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(_:didUpdateLocations:)), userInfo: nil, repeats: true) 

Это будет работать? Если да, то он собирается обновлять местоположение каждые 10 секунд?

+0

Не понимайте местоположение на основе временного интервала, так как это не способ сделать ставку, и вы, вероятно, будете потреблять много батареи. Лучше всего следить за перемещениями (использовать рамки coremotion) пользователя, например, ходьбой или вождением, и получать местоположение на основе фильтра расстояния, установленного каждые 10 метров или более. Когда пользователь находится в стационарном состоянии, убедитесь, что вы приостановили обновление своего местоположения или просто указали желаемую точность диспетчера местоположения на 3 километра и расстояние до более высокого значения. –

ответ

1

Вы не можете использовать didUpdateLocations. Если вы хотите, частые обновления, ваш лучший выбор является Стандартное обслуживание местоположение:

Стандартная услуга определения местоположения является наиболее подходящим для приложений, которые поставляют информацию о местоположении, связанных непосредственно с пользователем, но может использоваться другими типами приложений тоже. Чтобы запустить услугу, настройте желаемые свойства свойства и расстояния для местоположения , а затем вызовите requestLocation(), startUpdatingLocation(), или allowDeferredLocationUpdates (доTraveled: timeout :). Никогда укажите значение точности больше, чем нужно. Core Location использует значение точности, которое вы указываете для большей эффективности управления. Высшее значение точности требует более точного оборудования, такого как GPS, которое потребляет больше энергии.

https://developer.apple.com/reference/corelocation/cllocationmanager

1

Ваш селектор обратного вызова должен иметь другую подпись:

class MyClass { 

    func startTimer() { 
     _timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(MyClass.timerCallBack(_:)), userInfo: nil, repeats: true) 
    } 

    // ... 

    func timerCallBack(timer: Timer) { 
     // Here you go. 
    } 
} 

(Может содержать некоторые синтаксические ошибки, в настоящее время не имеют Xcode под рукой)

+0

Да, я понимаю, что это может вызвать функцию, которая делает кузнец, но именно то, что я хочу, - это местоположение пользователя после определенного периода времени. – yerpy

+0

Вы не можете этого сделать. Вы можете вызвать 'requestLocation' в диспетчере местоположений, но это вызовет вызов _async_ для ваших делегатов' locationManager (_: didUpdateLocations:) 'реализация. Существует не _synced_ способ сделать это –