私は1つのビューでUIImageView、イメージを変更すると再レイアウトが発生する - これを回避できますか?
override func viewDidLayoutSubviews()
{
showDefaultCustomProcessing()
}
...を持つクラスを持って、ユーザーが画像をタップして変更することができます...
@IBAction func changeDoorTap(t:UITapGestureRecognizer)
{
thing.image = UIImage(named:...new image...)
}
あなたが.image
を変更するたびにそれは、結局のところ、それは画面の再レイアウトを行います。
(私がいることを知りませんでしたが、それは理にかなっています。)
ので、残念ながらviewDidLayoutSubviewsが実行され、CustomProcessingは、デフォルトの状態に戻ります。それはまずいです。そのようなフラグを使用し、私はこれをした回避策として
........
var requestCustomLayoutAfterViewDidLayoutSubviews:Bool = false
@IBAction func changeDoorTap(t:UITapGestureRecognizer)
{
saveTemporaryCustomProcessing()
thing.image = UIImage(named:...new image...)
requestCustomLayoutAfterViewDidLayoutSubviews = true;
}
override func viewDidLayoutSubviews()
{
performDefaultCustomProcessing()
if (requestCustomLayoutAfterViewDidLayoutSubviews)
{
recoverTemporaryCustomProcessing()
}
requestCustomLayoutAfterViewDidLayoutSubviews = false;
}
が悪いパターンです。
1).image
を変更する方法はありますか?強制的に中継しない?
は(おそらく、レイヤレベル、または何かでそれを操作することによって?)
2)あなたは、おそらく再レイアウト-INGのを「オフ」し、再度オンにすることはできますか?
なぜ必要なのか分かりませんが、アクティブな状態の内外に制約をスワッピングするのは一般的で奨励され、簡単です。私はいつもそれをする。 Appleは 'activateConstraints'と' deactivateConstraints'コマンドを提供することでこれを非常に簡単にしました。 – matt
ああ、それを得た!ありがとうございました – Fattie
あなたは私の答えを受け入れることができないので、私は気にしませんが、他の質問にも答えました。 – matt