每次移动 UISlider 时删除注释 - mapView, Swift
Posted
技术标签:
【中文标题】每次移动 UISlider 时删除注释 - mapView, Swift【英文标题】:Remove annotations each time the UISlider is moved - mapView, Swift 【发布时间】:2020-10-22 08:39:59 【问题描述】:如何“动态”删除注释。也就是说,例如,如果我有一个 UISlider,每次我移动滑块时,我都想删除地图上的一些注释。如何做呢? (请注意,滑块的每一次移动都会添加地图上的注释,但必须删除滑块上一步的注释)。
【问题讨论】:
【参考方案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
。在这种情况下,当您将滑块移动到增加值时,应该会显示越来越多的注释。减少滑块值时注释更少。不过,任何其他逻辑都可以在其中应用。
【讨论】:
我之前也问过类似的问题,但是在这个链接上有一些代码,只是没有人回答......让我知道***.com/questions/64471948/…以上是关于每次移动 UISlider 时删除注释 - mapView, Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何将大图像添加到 UISlider 背景或放置在滚动视图中?