2016-09-24 14 views
0

を設定する不可解な副作用はラベルのテキストを設定すると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ですが、私はそれはそれの下に影を落として大きな正方形のタイル、不透明度の影にあったかのように、時にはマップは、ディスクオーバーレイをレンダリングすることを言及する必要がありますオーバーレイ自体のように不透明に向かって行きます。また、スライダに触れる前にズームアウトすると、スライダに親指をスライドさせると、すでに述べた不透明度の変化の上にマップがズームインして戻るようになります。興味がある人々のために

enter image description hereenter image description here

答えて

0

、私は、しかし、その背後にある根本的な原因と効果はまだ私に失われたビットで、この問題を解決する方法を考え出しました。

何が起こっているかは、これらのlabel.text = "---"割り当てが呼び出されるたびに、viewDidLayoutSubviews()関数も呼び出されます。 MKMapViewのオーバーレイとリージョンはviewDidLayoutSubviews内に設定されているので、オーバーレイが既存のものの上に再描画され、暗くて暗く見えるようになり、既にズームアウトしていればマップはズームインしてリージョンに戻ります。

まだ分かりませんが、なぜlabel.text = "---"を実行すると、viewDidLayoutSubviews関数が呼び出されるのですか?

+0

StackOverflowを検索すると、なぜUILabelのテキストを設定すると、viewDidLayoutSubviewsが起動するのかがわかります。私の場合、ここでの解決策は、viewDidLayoutSubviews内のすべてのコードをboolean ifステートメントにラップして、一度だけ実行されるようにすることです。 – user3915477