每次移动 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的主要内容,如果未能解决你的问题,请参考以下文章

滑块移动时删除注释 - 迅速

在 Swift 中自动移动 UISlider

使用 UISlider 移动到图像视图

如何将大图像添加到 UISlider 背景或放置在滚动视图中?

删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画

uislider:打开预览图片,如杂志应用