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?
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
Ah, hab es! Danke dafür – Fattie
Ich weiß nicht, warum ich mich darum kümmere, da du meine Antworten nicht akzeptierst, aber ich habe auch die andere Frage beantwortet. – matt