yandexmobile / yandexmapkit-ios

Yandex Map Kit for iOS
Other
173 stars 30 forks source link

Clustering #211

Open iniko83 opened 5 years ago

iniko83 commented 5 years ago

Подскажите пожалуйста, как решить такую проблему:

Есть YMK, есть набор placemarks и switcher, который переключает visibility данных place marks. Оно все плавно анимируется и работает как надо.

Решили добавить clustering и сходу столкнулись с множеством проблем: 1) Не распознает visibility, кластеризуя все placemarks вне зависимости от. 2) Ок, убрали visibility и пересоздаем placemarks каждый раз. Но при этом, мы естественно удаляем/приближаем камеру, чтобы все items вошли в focusRect. При этом clustering показывает наши placemarks + clusters и по мере удаления их "смешивает". 3) Ок, попробовали установить opacity в 0 и по завершению показа показывать то что есть, потому что сам процесс выглядит не очень. Вызываем collection.parent.traverse - он не находит кластеры...

Как решить эту проблему?

P.S. Ну а про интерфейс просто промолчу. Хуже я даже не припомню.

P.P.S. Видео: https://www.dropbox.com/s/jym4vlcvfouhtiq/clustering_example.mov?dl=0

iniko83 commented 5 years ago

Решил проблему обновляя items в mapUpdater только после анимации map в boundingBox, благо Rx с легкостью это позволяет делать. Т.е. следующий алгоритм.

1) Вначале анимации zoomToBoundingBox - collection.clear() 2) По завершению анимации выставляем items.

` checkoutItems .subscribe(onNext: { [unowned self] items in self.updateVisibleItems(items) }) .disposed(by: disposeBag)

private func updateVisibleItems(_ items: [CheckoutItem]) { let delayedItemsDisposeBag = DisposeBag() self.delayedItemsDisposeBag = delayedItemsDisposeBag

    mapUpdater.clearPlacemarks()

    let timeInterval = viewModel.inputs.mapTransitionDuration.value
    Observable.just(items)
        .delay(timeInterval, scheduler: MainScheduler.instance)
        .bind(to: mapUpdater.inputs.visibleItems)
        .disposed(by: delayedItemsDisposeBag)
}

`