jako vývojář iOS se vždy obáváme, že nám chybí znalosti nebo jsme někdy cítili, že jsme nedostateční v dovednostech. Říkáme vám všem programátorům, víte dost a buďte trpěliví sami se sebou, jak budete i nadále vynikat ve své každodenní práci nebo koníčcích v kódování.
vždy existuje mnoho seznamů vytvořených mnoha různými vývojáři, kteří říkají mnoho různých věcí, které bychom měli vědět nejprve jako vývojář iOS. Ale kolik je někdy dost? Dnes se zaměříme na malé maličkosti, které nám pomohou získat jasnější obraz při budování silnějšího základu. Nejprve pochopíme ty malé malé kódy, které denně používáme v našich nových projektech. Protože věřím, že malé maličkosti nám poskytnou větší porozumění ve větších věcech.
v tomto tutoriálu se budeme zabývat rozdíly mezi viewDidLoad
, viewDidAppear
a viewDidLayoutSubviews
. Na konci tutoriálu doufáme, že budete lépe rozumět životnímu cyklu řadiče view než dříve a budete schopni efektivně používat uvedenou metodu.
pokusím se použít mnoho různých způsobů, jak vysvětlit metody, protože někdy lze těžko pochopit prohlášení, které je skutečným bojem, kterému většina z nás rozumí. Můžete vidět opakování vysvětlení, které se pokusím parafrázovat pomocí různých slov, které vám pomohou pochopit to z jiného úhlu.
co je viewDidLoad?
měli byste být s touto metodou obeznámeni nebo alespoň mít hrubou představu o tom, co dělá při každém spuštění kódu. Tento kód vidíte při každém vytvoření projektu. Pokud ne, je to naprosto v pořádku.
definice uvedená společností Apple na viewDidLoad
zmínila, že je volána po načtení zobrazení řadiče do paměti. Jednoduše řečeno, je to první metoda, která se načte.
možná přemýšlíte, za jakých podmínek bude tato metoda plně využita? Odpověď zní, v podstatě cokoli jste chtěli, aby se aplikace načetla jako první. Například, možná budete chtít jinou barvu pozadí, místo bílé, možná byste si mohli vybrat modrou.
co je viewDidAppear?
někteří z vás pravděpodobně mají zkušenosti s používáním této metody a poněkud ji chápou, zatímco někteří mohou najít tuto novou. Bez ohledu na vaše zkušenosti, alespoň jednu z nich použijete ve svém projektu.
Apple to definuje jako “ upozorní řadič zobrazení, že jeho pohled byl přidán do hierarchie zobrazení. Jiným slovem to v podstatě znamená, že se to volá, když se uživateli zobrazí obrazovka.
rozdíl mezi viewDidAppear
a viewDidLoad
spočívá v tom, že viewDidAppear
se volá pokaždé, když přistanete na obrazovce, zatímco viewDidLoad
se volá pouze jednou, což je při načtení aplikace. Ukážu vám jednoduchý experiment, který vám pomůže pochopit, jak to funguje.
použiji realističtější způsob, jak to vysvětlit. Uvidíte v viewDidAppear
, vytvořil jsem pozici imageView být mimo obrazovku přidáním 300 a já jsem pomocí animace přesunout obraz z vnějšku obrazovky do spodního středu obrazovky.
Nyní byste měli vědět a pochopit, že viewDidAppear
je opakovaně voláno, zatímco viewDidLoad
je voláno pouze jednou prostřednictvím výše uvedených příkladů.
co je viewDidLayoutSubviews?
Apple poskytl velmi dobré vysvětlení tím, že řekl, že je vyzván, aby informoval řadič zobrazení, že jeho pohled právě vyložil své subviews. Jiným slovem je viewDidLayoutSubviews
voláno pokaždé, když je pohled aktualizován, otočen nebo změněn nebo je bounds change
. Klíčovým slovem je změna hranic.
ale vězte, že s viewDidLayoutSubviews
se uskuteční až poté, co byly použity všechny výpočty automatického rozvržení nebo automatické změny velikosti pohledů. Což znamená, že metoda viewDidLayoutSubviews
je volána pokaždé, když se změní velikost zobrazení a přepočítá se rozložení zobrazení.
pokaždé, když vytvoříte aplikaci, viewDidLayoutSubviews
se uskuteční hned po viewDidLoad
, protože nezapomeňte, že viewDidLayoutSubviews
se uskuteční, když se použije výpočet rozvržení. Pak, když otočíte aplikaci, viewDidLayoutSubviews
se bude konat znovu, a to pouze práce z portrétu na krajinu a na šířku zpět na výšku. A ne z krajiny vlevo do krajiny vpravo. Můžete hrát s ním pomocí simulátoru tím, že jde Hardware > orientace
ale zamysleme se nad tím. Jaké je pro to skutečné využití? Níže uvedená grafika ilustruje rozdíly a výsledek použití viewDidLayoutSubviews
. Můžete zkusit následující příklad tím, že neimplementujete viewDidLayoutSubviews
a můžete vidět rozdíly, jak je uvedeno níže. Všimněte si změny šířky.
nyní vysvětlím proces metody několika věcmi, které je třeba si uvědomit.
- tím se vytiskne počáteční pozice tlačítka
- tím se nahradí počáteční pozice novou pozicí
- Toto je Souřadnice tlačítka, které se načte na obrazovku – hodnota načtená
viewDidLoad
- uvidíte, že
viewDidLoad
pozice je přepsána hodnotouviewDidLayoutSubviews
a když otočíte obrazovku na výšku, uvidíte změnu šířky tlačítka.
poslední otázka, kterou byste pravděpodobně měli na mysli, je, kdy přepíšete metodu. Jsem si jistý, že na základě předchozích příkladů, které jste viděli, jste si pravděpodobně všimli, že viewDidLayoutSubviews
vždy přepíše viewDidLoad
.
a konečně, pokud se stále snažíte pochopit, doufám, že tento poslední příklad vám ukáže srovnání toho, jak fungují viewDidLoad
, viewDidAppear
a viewDidLayoutSubviews
. Nebo dokonce znovu přečíst a zažít to pro sebe. Nahrál jsem kód na GitHub pro případ, že byste chtěli vidět a porozumět kódům.