swift - 选择关闭 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 时,圆圈会出现,但我不能让它们消失。
解决方案
您可以使用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 = []
}
}
推荐阅读
- redux - 传递给 Redux reducer 时为 Immutable.js Map 键入注释
- ios - 删除两个或多个 '\r' '\n'
- regex - Shell脚本,替换下划线+空格+可能的数字
- keras - 如何在 keras 中实现对序列到序列模型的注意。请逐步解释
- arrays - 具有数学属性的 Excel VBA 字符串转换
- java - 本地通知未在所有设备中触发
- wordpress - 无法在 woocommerce 我的帐户页面中编辑标记
- wordpress - 基于 sku 的自定义货币 - WooCommerce
- docker - 现在正在监听哪个端口?暴露与端口?
- java - 什么时候可以在 android 中使用强引用并且此代码是否泄漏?