Als iOS-Entwickler sind wir immer besorgt, dass uns das Wissen fehlt oder dass wir manchmal das Gefühl haben, dass wir nicht über ausreichende Fähigkeiten verfügen. Wir sagen Ihnen allen Programmierern da draußen, Sie wissen genug und haben Geduld mit sich selbst, während Sie sich weiterhin in Ihrer täglichen Arbeit oder Ihren Hobbys beim Codieren auszeichnen.
Es gibt immer viele Listen von vielen verschiedenen Entwicklern, die viele verschiedene Dinge sagen, die wir als iOS-Entwickler zuerst wissen sollten. Aber wie viel ist jemals genug? Heute werden wir uns auf die kleinen kleinen Dinge konzentrieren, die uns helfen, ein klareres Bild zu bekommen, um ein stärkeres Fundament zu bauen. Wir werden zuerst die kleinen Codes verstehen, die wir täglich in unseren neuen Projekten verwenden. Da es mein Glaube ist, dass die kleinen kleinen Dinge uns ein größeres Verständnis in größeren Dingen geben werden.
In diesem Tutorial werden wir die Unterschiede zwischen viewDidLoad
, viewDidAppear
und viewDidLayoutSubviews
behandeln. Am Ende des Tutorials hoffen wir, dass Sie den Lebenszyklus des View Controllers besser als zuvor verstehen und die erwähnte Methode effektiv anwenden können.
Ich werde versuchen, die Methoden auf viele verschiedene Arten zu erklären, da manchmal eine Aussage kaum verstanden werden kann, was ein wahrer Kampf ist, den die meisten von uns verstehen. Sie können eine Wiederholung der Erklärung sehen, die ich versuchen werde, mit verschiedenen Wörtern zu paraphrasieren, um Ihnen zu helfen, sie aus verschiedenen Blickwinkeln zu verstehen.
Was ist viewDidLoad?
Sie sollten mit der Methode inzwischen vertraut sein oder zumindest eine ungefähre Vorstellung davon haben, was sie jedes Mal tut, wenn Sie Ihren Code ausführen. Sie sehen diesen Code jedes Mal, wenn Sie Ihr Projekt erstellen. Wenn nicht, ist es völlig in Ordnung.
In der von Apple unter viewDidLoad
angegebenen Definition wurde erwähnt, dass sie aufgerufen wird, nachdem die Ansicht des Controllers in den Speicher geladen wurde. Um es einfach auszudrücken, es ist die erste Methode, die geladen wird.
Sie denken vielleicht, unter welchen Bedingungen wird diese Methode vollständig genutzt? Die Antwort ist, im Grunde genommen, was auch immer Sie wollten, dass die App zuerst geladen wird. Zum Beispiel möchten Sie vielleicht eine andere Hintergrundfarbe anstelle von Weiß, Sie könnten vielleicht Blau wählen.
Was ist viewDidAppear?
Einige von Ihnen haben wahrscheinlich Erfahrung mit dieser Methode und verstehen sie einigermaßen, während andere dies möglicherweise neu finden. Unabhängig von Ihren Erfahrungen werden Sie mindestens eine davon in Ihrem Projekt verwenden.
Apple definiert dies als ‚benachrichtigt den Ansichtscontroller, dass seine Ansicht zu einer Ansichtshierarchie hinzugefügt wurde. Mit anderen Worten, es bedeutet im Grunde, dass dies aufgerufen wird, wenn der Bildschirm dem Benutzer angezeigt wird.
Der Unterschied zwischen viewDidAppear
und viewDidLoad
besteht darin, dass viewDidAppear
jedes Mal aufgerufen wird, wenn Sie auf dem Bildschirm landen, während viewDidLoad
nur einmal aufgerufen wird, wenn die App geladen wird. Lassen Sie mich Ihnen ein einfaches Experiment zeigen, damit Sie verstehen, wie es funktioniert.
Ich werde einen realistischeren Weg verwenden, um dies zu erklären. Sie werden in viewDidAppear
sehen, dass ich die Position der ImageView so erstellt habe, dass sie sich außerhalb des Bildschirms befindet, indem ich 300 hinzufüge, und ich verwende die Animation, um das Bild von außerhalb des Bildschirms in die untere Mitte des Bildschirms zu verschieben.
Inzwischen sollten Sie wissen und verstehen, dass viewDidAppear
wiederholt aufgerufen wird, während viewDidLoad
nur einmal durch die oben dargestellten Beispiele aufgerufen wird.
Was ist viewDidLayoutSubviews?
Apple gab eine sehr gute Erklärung dazu, indem es sagte, dass es aufgerufen wird, um den View-Controller zu benachrichtigen, dass seine Ansicht gerade seine Unteransichten angelegt hat. Mit anderen Worten, viewDidLayoutSubviews
wird jedes Mal aufgerufen, wenn die Ansicht aktualisiert, gedreht oder geändert wird, oder es ist bounds change
. Das Schlüsselwort hier ist bounds change.
Aber wissen Sie, dass es mit viewDidLayoutSubviews
erst stattfindet, nachdem alle Berechnungen für das automatische Layout oder die automatische Größenänderung auf die Ansichten angewendet wurden. Dies bedeutet, dass die Methode viewDidLayoutSubviews
jedes Mal aufgerufen wird, wenn sich die Ansichtsgröße ändert und das Ansichtslayout neu berechnet wurde.
Jedes Mal, wenn Sie eine App erstellen, findet viewDidLayoutSubviews
direkt nach viewDidLoad
statt, da viewDidLayoutSubviews
stattfindet, wenn die Layoutberechnung angewendet wird. Wenn Sie dann Ihre App drehen, wird viewDidLayoutSubviews
erneut ausgeführt, und dies funktioniert nur von Hochformat zu Querformat und von Querformat zurück zum Hochformat. Und nicht von Landschaft links nach Landschaft rechts. Sie können damit spielen, indem Sie den Simulator verwenden, indem Sie auf > gehen.
Aber lass uns darüber nachdenken. Was ist die wirkliche Verwendung dafür? Die folgende Grafik veranschaulicht die Unterschiede und das Ergebnis der Verwendung von viewDidLayoutSubviews
. Sie können das folgende Beispiel ausprobieren, indem Sie viewDidLayoutSubviews
nicht implementieren, und Sie können die Unterschiede wie unten gezeigt sehen. Beachten Sie die Änderung der Breite.
Ich werde nun den Prozess der Methode mit mehreren Dingen erklären, die Sie beachten sollten.
- Dadurch wird die Anfangsposition der Schaltfläche ausgedruckt
- Dadurch wird die Anfangsposition durch eine neue Position ersetzt
- Dies ist die Koordinate der Schaltfläche, die auf dem Bildschirm geladen wird – der von
viewDidLoad
- geladene Wert Sie werden sehen, dass die Position von
viewDidLoad
durch den Wert vonviewDidLayoutSubviews
überschrieben wird und wenn Sie drehen Sie den Bildschirm Hochformat, werden Sie die Änderung in der Breite zu sehen
Die letzte Frage, die Sie wahrscheinlich im Kopf haben würden, ist, wann Sie die Methode überschreiben. Ich bin sicher, basierend auf den vorherigen Beispielen, die Sie gesehen haben, haben Sie wahrscheinlich bemerkt, dass viewDidLayoutSubviews
immer viewDidLoad
überschreiben wird.
Wenn Sie immer noch Schwierigkeiten haben zu verstehen, hoffe ich, dass dieses letzte Beispiel Ihnen den Vergleich der Funktionsweise von viewDidLoad
, viewDidAppear
und viewDidLayoutSubviews
zeigt. Oder lesen Sie es noch einmal und erleben Sie es selbst. Ich habe den Code auf GitHub hochgeladen, falls Sie die Codes sehen und verstehen möchten.