Как я могу удалить аннотации динамически. То есть, например, если у меня есть UISlider, то при каждом перемещении ползунка я хочу удалить какие-то аннотации на карте. Как это сделать? (обратите внимание, аннотации на карте добавляются к каждому перемещению ползунка, но аннотации предыдущего шага ползунка ДОЛЖНЫ быть удалены).
Удалять аннотации каждый раз при перемещении UISlider — mapView, Swift
Ответы (1)
некоторая дополнительная информация была бы очень полезна для получения более конкретного ответа. Но одно из решений может быть таким:
import UIKit
import MapKit
class MapViewController: UIViewController {
@IBOutlet private var mapView: MKMapView?
private var myItems: [Item]? {
didSet {
clearItems()
refreshItems()
}
}
private var sliderValue: CGFloat = 0.0 {
didSet {
refreshItems()
}
}
private func clearItems() {
guard let mapView = mapView else { return }
mapView.removeAnnotations(mapView.annotations)
}
private func refreshItems() {
guard let myItems = myItems else { return }
let itemsToRemove = myItems.filter { $0.minimumDisplayValue > sliderValue && $0.isShown }
mapView?.removeAnnotations(itemsToRemove.map { $0.annotation })
itemsToRemove.forEach { $0.isShown = false }
let itemsToAdd = myItems.filter { $0.minimumDisplayValue <= sliderValue && !$0.isShown }
mapView?.addAnnotations(itemsToAdd.map { $0.annotation })
itemsToAdd.forEach { $0.isShown = true }
}
@IBAction private func sliderMoved(_ sender: UISlider) {
self.sliderValue = CGFloat(sender.value)
}
}
// MARK: - Item
private extension MapViewController {
class Item {
let annotation: MKAnnotation
let minimumDisplayValue: CGFloat
var isShown: Bool = false
init(annotation: MKAnnotation, minimumDisplayValue: CGFloat) {
self.annotation = annotation
self.minimumDisplayValue = minimumDisplayValue
}
}
}
В этом случае вы можете хранить все аннотации под myItems. Затем, когда вы перемещаете ползунок, вы в основном меняете фильтр того, какие из этих элементов фактически отображаются на карте.
Самое интересное происходит в refreshItems. В этом случае при перемещении ползунка в сторону увеличения значений должно отображаться все больше и больше аннотаций. И меньше аннотаций при уменьшении значения ползунка. Хотя здесь можно применить любую другую логику.
person
Matic Oblak
schedule
22.10.2020
Я задавал аналогичный вопрос раньше, но с некоторым кодом по этой ссылке, просто никто не ответил... дайте мне знать stackoverflow.com/questions/64471948/
- person sandrodothinks; 22.10.2020