首页 > 解决方案 > 选择关闭 UISwitch 时如何停止/删除方法?swift5/xcode11

问题描述

我正在开发一个带有一些叠加层(注释、圆圈、多边形)的地图应用程序。我也有 UISwitches 出现/消失。因为注释很简单:.add / .remove,它可以工作。

@IBAction func airportLayerSwitch(_ sender: UISwitch) {

    if sender.isOn {
        mapView.addAnnotations(airports)
    } else {
        mapView.removeAnnotations(airports)
    }
}

但是对于圆圈,多边形我不能让它们消失。这是我的圈子功能:

func airportBoundryOverlay(airportName:String, radius:CLLocationDistance){

    for airport in airports {
        if airport.title == airportName{
            let center = airport.coordinate
            let circle = MKCircle(center: center, radius: radius)
            mapView.addOverlay(circle)
        }
    }
}

func airportBoundries() {
    
    airportBoundryOverlay(airportName: "Békéscsaba",radius: 4000)
    airportBoundryOverlay(airportName: "Budaörs",radius: 4000)
}

所以对于我的第二个 UISwitch:

@IBAction func tizLayerSwitch(_ sender: UISwitch) {

    if sender.isOn {
        airportBoundries()
    } else {
        // TODO: ??????? disappear airportBoundries() ??????
    }
}

当我打开 UISwitch 时,圆圈会出现,但我不能让它们消失。

标签: swiftxcodeuiswitch

解决方案


您可以使用MKMapView.removeOverlays调用来执行此操作。

var circleOverlays: [MKOverlay] = []

func airportBoundryOverlay(airportName: String, radius: CLLocationDistance) {
    for airport in airports {
        if airport.title == airportName{
            let center = airport.coordinate
            let circle = MKCircle(center: center, radius: radius)
            mapView.addOverlay(circle)

            // Collect the circle overlays here
            circleOverlays.append(circle)
        }
    }
}

@IBAction func tizLayerSwitch(_ sender: UISwitch) {
    if sender.isOn {
        airportBoundries()
    } else {
        mapView.removeOverlays(circleOverlays)
        circleOverlays = []
    }
}

推荐阅读