XCode 8:设置label.text

时间:2016-09-24 18:17:37

标签: uilabel mkmapview xcode8 side-effects

设置标签的文字似乎可以使副作用增加已添加到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。

  • 更糟糕的是,我应该提到的是,有时地图渲染磁盘叠加就像是在一个大的方形瓷砖上投下一个阴影,一个阴影的不透明度就像覆盖层一样变为不透明本身。此外,如果我在触摸滑块之前缩小一些,则滑动滑块然后使地图在已经提到的不透明度变化之上放大。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

对于任何有兴趣的人,我都想出了如何解决这个问题,但其背后的根本原因和结果仍然有点让我失望。

什么时候发生的事情就是那些label.text =" ---"调用赋值,调用viewDidLayoutSubviews()函数。由于MKMapView的叠加和区域设置在viewDidLayoutSubviews中,因此叠加层会在现有叠加层上重新绘制,使其看起来变得更暗更暗,因此如果我将地图缩放回该区域已经缩小了。

我仍然不明白为什么要执行label.text =" ---"导致viewDidLayoutSubviews函数被调用。