Я разрабатываю приложение iOS, в котором пользователь может нажать на границу свойства, а mapView должен установить видимые границы в представлении для отображения всего свойства, а затем выделить границы свойства. Я использую setVisibleCoordinateBounds с обработчиком завершения, который выделяет границы свойств после завершения анимации.
func updateFieldBoundariesHighlightSourceShape(featureArray : [MGLMultiPolygonFeature]?) {
if let fieldBoundariesSource = self.mapView.style?.source(withIdentifier: Coordinator.MapBoxIdentifier.fieldBoundaryHighlightSourceLayer.rawValue) as? MGLShapeSource {
let features = featureArray ?? generateFieldBoundaryFeatureArray(fields: self.fields.map({$0}))
let newShapeCollectionFeature = MGLShapeCollectionFeature(shapes: features)
fieldBoundariesSource.shape = newShapeCollectionFeature
}
}
func setHighlightedField(field: Field)
(...)
self.mapView.setVisibleCoordinateBounds(fieldFeature.overlayBounds, edgePadding: UIEdgeInsets(top: 65, left: 65, bottom: 65, right: 65), animated: true, completionHandler: {
// After zooming and positioning field on the screen, add layers to the map's style.
self.sceneStates.activeField = selectedField
self.updateFieldBoundariesHighlightSourceShape(featureArray: [fieldFeature])
})
(...)
}
Это фрагмент того, что у меня есть. Когда масштаб находится на уровне, который показывает все свойство, он увеличивает масштаб и все в порядке. Проблема заключается в том, что при увеличении небольшого свойства и последующем выборе более крупного анимация масштабирования останавливается в какой-то момент (не полностью), а слой подсветки показывает обрезанный многоугольник по сравнению с реальными границами наложения свойства.
У меня есть посмотрел на этот вопрос, но ни один из ответов не устранил проблему. Похоже, MapBox получает только многоугольник / границы из видимой / соседней плитки и обрезает то, что находится за пределами этой плитки.
Я пробовал использовать следующие подходы с одинаковыми результатами: mapView.fly (to: ), cameraThatFitsCoordinateBounds и setVisibleCoordinates (используя координаты точки многоугольника в качестве массива небезопасных указателей)
Вот GIF-файл того, что происходит