2016-05-24 8 views
1

Ich habe eine Klasse mit ...UIImageView, wechselnde .image Ergebnisse in relayout - kann es vermieden werden?

override func viewDidLayoutSubviews() 
    { 
    showDefaultCustomProcessing() 
    } 

Auf einen Blick kann der Benutzer ein Bild tippen und ändern ...

@IBAction func changeDoorTap(t:UITapGestureRecognizer) 
    { 
    thing.image = UIImage(named:...new image...) 
    } 

Es stellt sich heraus, wann immer Sie .image ändern, es macht ein relayout des Bildschirms.

(Ich wusste, dass es nicht, aber es macht Sinn.)

So leider viewDidLayoutSubviews läuft und die CustomProcessing wird in den Auslieferungszustand zurückgeführt. Das ist nicht gut.

Als Abhilfe, die ich dieses ........ tat ist

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; 
    } 

Unter Verwendung einer solchen Flagge ein schlechtes Muster.

1) Gibt es eine Möglichkeit, einen .image zu ändern, aber force kein relayout?

(Vielleicht, indem sie sich auf der Schichtebene zu manipulieren, oder was?)

2) Können Sie vielleicht "ausschalten" re-lay-out-ing und dann wieder einschalten?

Antwort

1

Gibt es eine Möglichkeit, eine .image zu ändern, aber zu zwingen, kein Neu-Layout

Sure: gibt dem UIImageView eine Breite Einschränkung und eine Höhe Beschränkung. Ohne diese nimmt es die Größe seines Bildes an. Bei ihnen gehorcht es nur den Zwängen.

+0

Nicht sicher, warum Sie müssen, aber flink Switches Einschränkungen in und aus dem aktiven Zustand ist üblich und ermuntert und einfach; Das mache ich die ganze Zeit. Apple hat dies mit den Befehlen 'activateConstraints' und' disableConstraints' sehr einfach gemacht. – matt

+0

Ah, hab es! Danke dafür – Fattie

+0

Ich weiß nicht, warum ich mich darum kümmere, da du meine Antworten nicht akzeptierst, aber ich habe auch die andere Frage beantwortet. – matt