2016-05-24 6 views
1

私は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のを「オフ」し、再度オンにすることはできますか?

答えて

1

何の再レイアウト

を.imageを変更しないが、強制する方法があることを確認:UIImageViewに幅の制約と高さの制約を与えます。これらがなければ、そのイメージのサイズを採用します。彼らと一緒に、それはただの制約に従います。

+0

なぜ必要なのか分かりませんが、アクティブな状態の内外に制約をスワッピングするのは一般的で奨励され、簡単です。私はいつもそれをする。 Appleは 'activateConstraints'と' deactivateConstraints'コマンドを提供することでこれを非常に簡単にしました。 – matt

+0

ああ、それを得た!ありがとうございました – Fattie

+0

あなたは私の答えを受け入れることができないので、私は気にしませんが、他の質問にも答えました。 – matt

関連する問題