を設定する不可解な副作用はラベルのテキストを設定するとMKMapViewに追加されましたMKCircleの不透明度を高める副作用を持つことができることが表示されます。ここでXCodeの8:label.text
は何が起こっているのである:
まず私は
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
}
私overylayのレンダリングを処理するために、このデリゲートの機能を持っているそして、私は
map.delegate = self
let diskOverlay: MKCircle = MKCircle.init(center: location, radius: diskRadius)
map.add(diskOverlay)
MKMapView
に追加するすべてが良いようです。今では、私はココアポッドから得たYSRangeSliderというカスタムUIControlを持っています。ユーザーがこのスライダで親指を動かすと、現在の値がスライダ上にあるかどうかに応じて、いくつかのラベルのテキストを更新する関数が呼び出されます。ここにその機能があります。今ここにfunc setPlayerLabels() {
let lowerValue = Int(playersSlider.minimumSelectedValue)
let upperValue = Int(playersSlider.maximumSelectedValue)
minPlayersLabel.text = "\(lowerValue)"
maxPlayersLabel.text = "\(upperValue)"
}
は本当に奇妙なことです。私がこのアプリケーションを起動し、このViewControllerにセグをしてスライダの親指をスライドさせると、MKCircle(マップ上に表示される弱いディスク)は、塗りつぶされるまでますます不透明になります。しかし、上記の関数で2つのlabel.text = "---"をコメントアウトすると、この奇妙な動作はもう発生しません。
以下は、最初に見える(不透明度が低い)オーバーレイと、混乱した後に(不透明になる)オーバーレイを見ることができます。私はなぜこれが起こっているのか、それをどう修正するのかという深い理由はわかりません。これは、物事をさらに悪化させるためにスウィフト3.
- とXCodeの8ですが、私はそれはそれの下に影を落として大きな正方形のタイル、不透明度の影にあったかのように、時にはマップは、ディスクオーバーレイをレンダリングすることを言及する必要がありますオーバーレイ自体のように不透明に向かって行きます。また、スライダに触れる前にズームアウトすると、スライダに親指をスライドさせると、すでに述べた不透明度の変化の上にマップがズームインして戻るようになります。興味がある人々のために
StackOverflowを検索すると、なぜUILabelのテキストを設定すると、viewDidLayoutSubviewsが起動するのかがわかります。私の場合、ここでの解決策は、viewDidLayoutSubviews内のすべてのコードをboolean ifステートメントにラップして、一度だけ実行されるようにすることです。 – user3915477