View Controller Lifecycle Explained: mikor kell használni viewDidLayoutSubviews

a szerkesztő megjegyzése: korábban egy új oktatóanyagsorozatot indítottunk az iOS alkalmazásfejlesztéssel kapcsolatos néhány gyakori kérdés megválaszolására. Kezdőknek, felmerült egy kérdés, hogy mikor kell használni a viewDidLayoutSubviews alkalmazást. Ebben az oktatóanyagban a Kelvin megvizsgálja a nézetvezérlő életciklus-módszereit,és elmagyarázza, hogy mi a viewDidLayoutSubviews módszer.

mint iOS fejlesztő, mindig aggódunk, hogy hiányzik a tudás, vagy néha úgy éreztük, hogy nem vagyunk megfelelőek a készségekben. Azt mondjuk nektek, minden programozónak, hogy eleget tudtok, és legyetek türelmesek magatokkal, miközben továbbra is kitűntök a mindennapi munkátokban vagy a hobbitokban a kódolásban.

mindig van egy csomó listák által sok különböző fejlesztők mondván Sok különböző dolog, hogy tudnunk kell először, mint egy iOS fejlesztő. De mennyi valaha is elég? Ma azokra a kis apróságokra összpontosítunk, amelyek tisztább képet adnak nekünk egy erősebb alap felépítéséhez. Először meg fogjuk érteni azokat a kis kis kódokat, amelyeket naponta használunk új projektjeinkben. Mivel meggyőződésem, hogy a kis kis dolgok nagyobb megértést adnak nekünk a nagyobb dolgokban.

ebben az oktatóanyagban a viewDidLoad, viewDidAppearés viewDidLayoutSubviews közötti különbségekkel fogunk foglalkozni. A bemutató végére reméljük, hogy jobban megérti a nézetvezérlő életciklusát, mint korábban, és hatékonyan tudja használni az említett módszert.

megpróbálom használni sok különböző módon, hogy ismertesse a módszerek, mint néha egy nyilatkozatot alig lehet érteni, ami egy igazi harc, hogy a legtöbben megérti. Előfordulhat, hogy egy ismétlés a magyarázat, amely megpróbálom átfogalmazni különböző szavakkal, hogy segítsen megérteni, hogy különböző szögből.

mi az a viewDidLoad?

már ismernie kell a módszert, vagy legalább egy durva elképzelése van arról, hogy mit csinál minden alkalommal, amikor futtatja a kódot. Ezt a kódot minden alkalommal látja, amikor létrehozza a projektet. Ha nem, teljesen rendben van.

az Apple által a viewDidLoad – on megadott meghatározás megemlítette, hogy a vezérlő nézetének memóriába való betöltése után hívják meg. Egyszerű kifejezéssel fogalmazva, ez az első módszer, amely betöltődik.

lehet, hogy azon gondolkodik, milyen feltételek mellett fogja ezt a módszert teljes mértékben kihasználni? A válasz, alapvetően bármit is akart, hogy az alkalmazás először betöltődjön. Például, lehet, hogy más háttérszínt szeretne, a fehér helyett talán a kéket választhatja.

mi az a viewDidAppear?

néhányan közületek valószínűleg rendelkeznek tapasztalattal ennek a módszernek a használatában, és valamennyire megértik azt, míg mások talán újnak találják ezt. Függetlenül attól, hogy a tapasztalatok, akkor legalább használja az egyik ezt a projekt.

az Apple ezt úgy határozza meg, hogy ‘értesíti a nézetvezérlőt, hogy a nézete hozzáadódott a nézethierarchiához. Más szóval ez alapvetően azt jelenti, hogy ezt hívják, amikor a képernyő megjelenik a felhasználónak.

a különbség viewDidAppear és viewDidLoad az, hogy viewDidAppear hívják minden alkalommal, amikor földet a képernyőn, míg viewDidLoad csak akkor hívják, amikor az alkalmazás betöltődik. Hadd mutassak egy egyszerű kísérletet, amely segít megérteni, hogyan működik.

majd egy reálisabb módon megmagyarázni ezt. A viewDidAppear pontban a 300 hozzáadásával létrehoztam az imageView pozícióját a képernyőn kívülre, és az animáció segítségével a képet a képernyőn kívülről a képernyő alsó közepére helyezem.

mostanra már tudnia kell és meg kell értenie, hogy az viewDidAppear – ot ismételten hívják, míg az viewDidLoad – ot csak egyszer hívják meg a fenti példákon keresztül.

mi az a viewDidLayoutSubviews?

az Apple nagyon jó magyarázatot adott erre azzal, hogy felszólítják, hogy értesítse a nézetvezérlőt arról, hogy nézete éppen lefektette az alnézeteit. Egy másik szóban a viewDidLayoutSubviews minden alkalommal meghívásra kerül, amikor a nézetet frissítik, elforgatják vagy megváltoztatják, vagy bounds change. A kulcsszó itt a bounds change.

de tudd, hogy viewDidLayoutSubviews esetén csak akkor kerül sor, ha a nézetek összes automatikus elrendezését vagy automatikus átméretezését elvégezték. Ez azt jelenti, hogy a viewDidLayoutSubviews metódust minden alkalommal meghívják, amikor a nézet mérete megváltozik, és a nézet elrendezése újraszámításra kerül.

minden alkalommal, amikor építeni egy alkalmazást, viewDidLayoutSubviews kerül sor után viewDidLoad mert ne feledje, hogy viewDidLayoutSubviews kerül sor, amikor az elrendezés számítás alkalmazzák. Ezután az alkalmazás elforgatásakor a viewDidLayoutSubviews ismét megtörténik, és ez csak portrétól tájképig, a tájképtől pedig portrét eredményez. És nem a táj balról jobbra. Lehet játszani vele segítségével a szimulátor megy hardver > orientáció

de gondolkozzunk el rajta. Mi ennek a valódi felhasználása? Az alábbi ábra a viewDidLayoutSubviews használatának különbségeit és eredményét szemlélteti. Kipróbálhatja a következő példát, ha nem hajtja végre a viewDidLayoutSubviews parancsot, és láthatja a különbségeket az alábbiak szerint. Figyelje meg a szélesség változását.

most elmagyarázom a módszer folyamatát több dologgal, amelyekkel tisztában kell lenni.

  1. ez kinyomtatja a gomb kezdeti helyzetét
  2. ez helyettesíti a kezdeti pozíciót egy új pozícióval
  3. ez a gomb koordinátája, amely betöltődik a képernyőn – a viewDidLoad
  4. által betöltött érték látni fogja, hogy a viewDidLoad pozíciót felülírja a viewDidLayoutSubviews értéke, és amikor a forgassa el a képernyőt álló helyzetbe, látni fogja a szélesség változását

most az utolsó kérdés, amit valószínűleg a fejedben lenne, mikor írja felül a módszert. Biztos vagyok benne, hogy az előző példák alapján, amelyeket látott, valószínűleg észrevette, hogy a viewDidLayoutSubviewsmindig felülírja a viewDidLoad értéket.

végül, ha még mindig küzdesz a megértéssel, remélem, ez az utolsó példa megmutatja az összehasonlítást a viewDidLoad, viewDidAppear és viewDidLayoutSubviews működéséről. Vagy akár újra olvasni, és megtapasztalni magad. Feltöltöttem a kódot a GitHub-ra, ha szeretné látni és megérteni a kódokat.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.