2gis / mobile-sdk-ios-demo

BSD 2-Clause "Simplified" License
13 stars 5 forks source link

Карта зависает и камера не меняет позицию. #207

Closed yadik64 closed 8 months ago

yadik64 commented 10 months ago

Привет. В целом у меня всегда хорошо отрабатывает центрирование карты. Но на одной карте я использую такой метод.

    func move(circle: Circle, padding: Padding, complited: (() -> Void)? = nil) {
        DispatchQueue.main.async {
            self.moveCameraCancellable?.cancel()
            let geoRect = circle.bounds
            let pointGeometryArray = [
                PointGeometry(point: geoRect.northEastPoint),
                PointGeometry(point: geoRect.southWestPoint),
            ]
            let geometry = ComplexGeometry(geometries: pointGeometryArray)
            let position = calcPosition(camera: self.view.mapFactory.map.camera,
                                        geometry: geometry,
                                        screenArea: padding)

            self.moveCameraCancellable = self.view.mapFactory.map
                .camera
                .move(position: position, time: 1.0, animationType: .linear)
                .sink { _ in
                    complited?()
                } failure: { error in
                    print(error.localizedDescription)
                }
        }
    }

И при заходе на экран он отрабатывает отлично, потом я могу ввести адрес вручную и через сервис Dadata получить координаты. По этим координатам я формирую Circle с заданным адресом и передаю его в метод что написал выше. Проблема не воспроизводится на симуляторе, а вот на реальном устройстве происходит зависание карты(она перестает реагировать на нажатия) и центрирование не происходит. Причем я могу несколько раз все сделать успешно, но проблема воспроизведется довольно быстро. Я не попадаю ни в sink ни в failure, но стоит дотронутся до карты sink отрабатывает, но ничего уже не происходит. А так же некоторые надписи улиц на карте становятся серыми а не черными, как будто карту что-то накрывает. Но с моей стороны накрывать ее нечем.

Вот карта после зависания. ул Муленкова стара серой. IMG_6860

А вот в рабочем состоянии. IMG_6861

yadik64 commented 10 months ago

Проблема была не в методе move(circle: Circle, padding: Padding, complited: (() -> Void)? = nil) , а в том что поверх карты появлялся экран для выбора адреса. Если экран появляется fullScreenCover или sheet то в какой то момент карта под ним зависает. Я поменял на push и зависания исчезли.

maxal9999 commented 9 months ago

@yadik64 Привет. А у тебя не осталось демки с повторением зависания? Это на версии 7.4.0?

maxal9999 commented 8 months ago

@yadik64 Привет. Если что, то мы выпустили версию 7.4.1, где пофиксили зависания.