se Controllerens livscyklus forklaret: Hvornår skal du bruge visningsidlayout-visninger

Redaktørens note: tidligere startede vi en ny serie tutorials for at besvare nogle af dine almindelige spørgsmål om iOS-appudvikling. For begyndere, et spørgsmål dukkede op, er, hvornår man skal bruge visningsidlayout-visninger. I denne tutorial vil Kelvin undersøge nogle af livscyklusmetoderne for visningskontroller og forklare, hvad metoden til visning af visninger er til.

som iOS-udvikler er vi altid bekymrede for, at vi mangler viden, eller nogle gange følte vi, at vi er utilstrækkelige i færdigheder. Vi siger til jer alle programmører derude, du ved nok og vær tålmodig med dig selv, når du fortsætter med at udmærke dig i dit daglige arbejde eller hobbyer inden for kodning.

der er altid mange lister lavet af mange forskellige udviklere, der siger mange forskellige ting, som vi først bør vide som iOS-Udvikler. Men hvor meget er nogensinde nok? I dag vil vi fokusere på de små små ting, der vil hjælpe med at give os et klarere billede for at opbygge et stærkere fundament. Vi vil først forstå de små små koder, som vi bruger dagligt i vores nye projekter. Da det er min tro på, at de små små ting vil give os en større forståelse i større ting.

i denne vejledning skal vi tage fat på forskellene mellem viewDidLoad, viewDidAppearog viewDidLayoutSubviews. Ved afslutningen af selvstudiet håber vi, at du får en bedre forståelse af visningskontrollerens livscyklus end før og er i stand til effektivt at bruge den nævnte metode.

jeg vil prøve at bruge mange forskellige måder at forklare metoderne på, da nogle gange en erklæring næppe kunne forstås, hvilket er en sand kamp, som de fleste af os forstår. Du kan se en gentagelse af forklaring, som jeg vil forsøge at omskrive ved hjælp af forskellige ord for at hjælpe dig med at forstå det fra en anden vinkel.

Hvad er ?

du skal være bekendt med metoden nu eller i det mindste have en grov ide om, hvad den gør, hver gang du kører din kode. Du kan se denne kode, hver gang du opretter dit projekt. Hvis du ikke gør det, er det helt fint.

definitionen givet af Apple på viewDidLoad nævnte, at den kaldes, efter at controllerens visning er indlæst i hukommelsen. For at sige det på et enkelt udtryk er det den første metode, der indlæses.

du tænker måske under hvilken betingelse vil denne metode blive fuldt udnyttet? Svaret er, stort set hvad du ville have appen til at indlæse først. For eksempel vil du måske have en anden baggrundsfarve, i stedet for hvid, kan du måske vælge blå.

Hvad er ?

nogle af jer har sandsynligvis oplevelsen af at bruge denne metode og forstår den noget, mens nogle måske finder denne nye. Uanset dine oplevelser vil du i det mindste bruge en af dette på dit projekt.

Apple definerer dette som ‘meddeler visningskontrolleren, at dens visning blev føjet til et visningshierarki. I et andet ord betyder det dybest set, at dette kaldes, når skærmen vises til brugeren.

forskellen mellem viewDidAppear og viewDidLoad er, at viewDidAppear kaldes hver gang du lander på skærmen, mens viewDidLoad kun kaldes en gang, hvilket er når appen indlæses. Lad mig vise dig et simpelt eksperiment, der hjælper dig med at forstå, hvordan det fungerer.

jeg vil bruge en mere realistisk måde at forklare dette på. Du kan se i viewDidAppear, jeg har oprettet placeringen af billedvisningen for at være uden for skærmen ved at tilføje 300, og jeg bruger animationen til at flytte billedet fra ydersiden af skærmen til bunden af skærmen.

nu skal du vide og forstå, at viewDidAppear gentagne gange kaldes, mens viewDidLoad kun kaldes en gang gennem eksemplerne illustreret ovenfor.

Hvad er visionidlayoutmeddelelser?

Apple gav en meget god forklaring på dette ved at sige, at det kaldes for at underrette visningskontrolleren om, at dens opfattelse netop har lagt sine undervisninger. I et andet ord kaldes viewDidLayoutSubviews hver gang visningen opdateres, roteres eller ændres, eller det er bounds change. Nøgleordet her er bounds change.

men ved, at det med viewDidLayoutSubviews kun finder sted, når alle beregninger af automatisk layout eller automatisk ændring af størrelse på visningerne er blevet anvendt. Betydning af metoden viewDidLayoutSubviews kaldes hver gang visningsstørrelsen ændres, og visningslayoutet er blevet genberegnet.

hver gang du bygger en app, finder viewDidLayoutSubviews sted lige efter viewDidLoad fordi husk at viewDidLayoutSubviews finder sted, når layoutberegningen anvendes. Derefter, når du roterer din app, finder viewDidLayoutSubviews sted igen, og dette fungerer kun fra portræt til landskab og landskab tilbage til portræt. Og ikke fra landskab til venstre til landskab til højre. Du kan lege med det ved at bruge simulatoren ved at gå i udstyr > orientering

men lad os tænke over det. Hvad er den reelle brug for dette? Nedenstående grafik illustrerer forskellene og resultatet af at bruge viewDidLayoutSubviews. Du kan prøve følgende eksempel ved ikke at implementere viewDidLayoutSubviews, og du kan se forskellene som vist nedenfor. Bemærk ændringen af bredden.

jeg vil nu forklare processen med metoden med flere ting at være opmærksom på.

  1. dette udskriver den indledende position af knappen
  2. dette erstatter den indledende position med en ny position
  3. dette er koordinaten for knappen, der indlæses på skærmen – værdien indlæst af viewDidLoad
  4. du vil se, at viewDidLoad position overskrives med værdien viewDidLayoutSubviews, og når du drej skærmen til portræt, vil du se ændringen i bredden

nu er det sidste spørgsmål, du sandsynligvis ville have i dit sind, hvornår overskriver du metoden. Jeg er sikker på, baseret på de tidligere eksempler, som du har set, har du sikkert bemærket, at viewDidLayoutSubviews altid vil tilsidesætte viewDidLoad.

endelig, hvis du stadig kæmper for at forstå, håber jeg, at dette sidste eksempel vil vise dig sammenligningen af, hvordan viewDidLoad, viewDidAppear og viewDidLayoutSubviews arbejde. Eller endda genlæse igen og opleve det selv. Jeg har uploadet koden på GitHub, hvis du gerne vil se og forstå koderne.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.