Closed SuleymanovKamil closed 4 months ago
Я так понял YMKUserLocationLayer имеет доступ к обновлению геолокации пользователя по умолчанию. Как запретить ему это делать? setDefaultSource и setSourceWith не помогают
Скачки пина не воспроизвелись. В UserLocationLayer есть фильтрация неподходящих данных.
onLocationUpdated
мог не вызываться, если при подписке на LocationManager
поставить флаг allowUseInBackground: true
и при этом не выдать нужных прав. В таком случае в логе будет сообщение "Missing 'location' flag in 'UIBackgroundModes' capabilities of your application needed for location background usage".
Если хочется написать свой фильтр или управлять локацией в ручном режиме, то можно воспользоваться DummyLocationManager
. Он создается методом YMKMapKit.createDummyLocationManager
и устанавливается в MapKit методом YMKMapKit.setLocationManager
.
Если вопрос не решён, пожалуйста, пришлите нам минимальный пример вашей ситуации и действия для воспроизведения. Вы можете выложить его проектом на GitHub, прикрепить к переписке в архиве или загрузить на Яндекс Диск и указать ссылку.
В UserLocationLayer есть фильтрация неподходящих данных.
Как это свойство или метод называется? Я не нашел: https://yandex.ru/dev/mapkit/doc/ru/Swift/YMKUserLocationLayer
onLocationUpdated мог не вызываться
onLocationUpdated вызывается у locationManager, который я создаю через createLocationManager(). В subscribeForLocationUpdates я задаю значение на обновление в 5 секунд. Но у userLocationLayer свой YMKLocationManager, которым я не могу управлять и он обновляется сам по себе.
https://github.com/yandex/mapkit-ios-demo/assets/38867359/cd46a526-180b-412b-a5d9-a06b4c534555
Телефон лежит на столе.
```
let mapKit: YMKMapKit = YMKMapKit.sharedInstance()
userLocationLayer = mapKit.createUserLocationLayer(with: mapViewController.mapView.mapWindow)
userLocationLayer?.setVisibleWithOn(true)
userLocationLayer?.isHeadingEnabled = true
userLocationLayer?.setObjectListenerWith(self)
locationManager = mapKit.createLocationManager()
locationManager?.subscribeForLocationUpdates(
withDesiredAccuracy: 1,
minTime: (Int64(UserDefaults.routeUpdateTimeOut) ?? 0) * 1000, // convert milliseconds to seconds
minDistance: 1,
allowUseInBackground: false,
filteringMode: .on,
locationListener: self
)
Мне наконец удалось начать крутить пин пользователя, но я столкнулся с новой проблемой: пин начинает самостоятельно пересоздаваться на новой локации. Особенно часто это происходит если находиться внутри помещения. При этом direction пина сбрасывается и указатель начинает смотреть наверх. Метод onLocationUpdated не вызывается.