设置标签的文字似乎可以使副作用增加已添加到MKMapView的MKCircle的不透明度。
以下是:
首先,我有这个委托函数来处理渲染我的overylay
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let diskRenderer: MKCircleRenderer = MKCircleRenderer.init(overlay: overlay)
diskRenderer.fillColor = UIColor.init(red: 0, green: 255, blue: 255, alpha: 0.10)
diskRenderer.strokeColor = UIColor.init(red:0, green: 0, blue: 0, alpha: 0.25)
return diskRenderer
}
然后我将它添加到MKMapView
map.delegate = self
let diskOverlay: MKCircle = MKCircle.init(center: location, radius: diskRadius)
map.add(diskOverlay)
一切似乎都很好。现在,同时,我有一个名为YSRangeSlider的自定义UIControl,我是从cocoapods获得的。当用户在此滑块上移动拇指时,将调用一个函数,该函数根据滑块上的当前值更新某些标签的文本。这是该功能。
func setPlayerLabels() {
let lowerValue = Int(playersSlider.minimumSelectedValue)
let upperValue = Int(playersSlider.maximumSelectedValue)
minPlayersLabel.text = "\(lowerValue)"
maxPlayersLabel.text = "\(upperValue)"
}
现在这里是非常奇怪的事情。当我启动应用程序并转向此ViewController,然后开始在滑块上滑动滑块时,MKCircle(即地图上显示的微弱磁盘)变得越来越不透明,直到它被填充为止。但是,如果我将两个标签注释掉.text =" ---"在上面的函数中继续,这种奇怪的行为不再发生。
下面你可以看到最初看起来的叠加层(低不透明度)然后在搞砸之后(不透明)。我不知道为什么会发生这种情况的深层原因,也不知道如何解决这个问题。这是带有Swift 3的XCode 8。
答案 0 :(得分:0)
对于任何有兴趣的人,我都想出了如何解决这个问题,但其背后的根本原因和结果仍然有点让我失望。
什么时候发生的事情就是那些label.text =" ---"调用赋值,调用viewDidLayoutSubviews()函数。由于MKMapView的叠加和区域设置在viewDidLayoutSubviews中,因此叠加层会在现有叠加层上重新绘制,使其看起来变得更暗更暗,因此如果我将地图缩放回该区域已经缩小了。
我仍然不明白为什么要执行label.text =" ---"导致viewDidLayoutSubviews函数被调用。