iOS snöggt - setNeedsLayout vs layoutIfNeded vs layoutSubviews ()

Ég velti því alltaf fyrir mér þessum aðferðum meðan ég kóðaði í iOS. Ég reyndi að lesa meira og þetta var það sem ég skildi.

Þegar iOS-app er ræst byrjar UIA-forrit í iOS aðal keyrsluslönguna fyrir forrit, sem keyrir á aðalþræðinum. Aðalhlaup lykkjunnar vinnur atburði (svo sem snertingu notenda) og meðhöndlar uppfærslur á útsýnisviðmótum. Þegar atburðir eiga sér stað, svo sem snerting, staðsetningaruppfærslur, hreyfing og margmiðlunarstýring, finnur hlaupa lykkjan viðeigandi meðhöndlun fyrir atburðina, hringir í viðeigandi aðferðir, sem kallar aðrar aðferðir og svo framvegis. Á einhverjum augnabliki í tíma, allir atburðir munu hafa verið meðhöndlaðir og stjórnun mun fara aftur í hlaupa lykkjuna. Við skulum merkja þennan punkt þar sem stjórn er skilað í keyrsluslönguna sem uppfærsluferlið.

Meðan atburðirnir eru í vinnslu og nokkrar breytingar eru beðnar um áhorfið, eru þessar breytingar ekki uppfærðar strax. Í staðinn bíður kerfið eftir því að núverandi ferli ljúki og þegar næsta endurtekningarferli er að fara að gerast. Það er reglulega millibili milli atburðarvinnslunnar og meðferðar við uppfærslu HÍ. Þess vegna þurfum við að skilja ofangreindar þrjár aðferðir almennilega.

- setNeedsLayout ()

Aðferðin setNeedsLayout fyrir UIView segir kerfinu að þú viljir að það skipi og endurriti það útsýni og allar undirskoðanir þess, þegar tími er kominn til uppfærsluferlisins. Þetta er ósamstilltur virkni vegna þess að aðferðinni lýkur og kemur aftur strax en það er ekki fyrr en nokkru síðar sem skipulag og teikning gerist í raun og þú veist ekki hvenær þessi uppfærsluferill verður.

Apple doc segir: Kallaðu á þessa aðferð á aðalþræði forritsins þíns þegar þú vilt laga skipulag undirhorfa skjásins. Þessi aðferð gerir athugasemd við beiðnina og skilar strax. Vegna þess að þessi aðferð neyðir ekki til tafarlausrar uppfærslu, heldur bíður þess í stað að næsta uppfærsluferli, getur þú notað hana til að ógilda skipulag margra áhorfa áður en einhver þessara skoðana er uppfærð. Þessi hegðun gerir þér kleift að sameina allar skipulag uppfærslur í eina uppfærsluferil, sem venjulega er betri fyrir frammistöðu.

- layoutIfNeeded ()

Aftur á móti er aðferðin layoutIfNeeded samstillt símtal sem segir kerfinu að þú viljir skipulag og endurrita útsýni og undirsýn þess og þú vilt að það sé gert strax án þess að bíða eftir uppfærsluferlinu. Þegar hringingu í þessa aðferð er lokið hefur skipulagið þegar verið breytt og teiknað út frá öllum breytingum sem fram höfðu komið fyrir aðferðina.

- skipulag Yfirlit ()

Sjálfgefna útfærslan notar allar þvinganir sem þú hefur stillt til að ákvarða stærð og staðsetningu undirhorfa.

Undirflokkar geta hnekkt þessari aðferð eftir þörfum til að framkvæma nákvæmari skipulag á undirsýn þeirra. Þú ættir aðeins að hnekkja þessari aðferð ef sjálfvirk stærð og þvingunartengd hegðun undirskoðanna býður ekki upp á þá hegðun sem þú vilt. Þú getur notað útfærsluna þína til að stilla rammahyrninga á undirhorfum þínum beint.

Þú ættir ekki að kalla þessa aðferð beint. Ef þú vilt þvinga út skipulag uppfærslu skaltu hringja í aðferðina setNeedsLayout () til að gera það áður en næsta teiknauppfærsla er gerð. Ef þú vilt uppfæra skipulag skoðana þinna strax skaltu hringja í aðferðina layoutIfNeeded ().

Til að fá betri skilning skaltu hlaða niður og keyra kóðann í Github. Ég fann þetta úr hlekknum sem nefndur er hér að neðan.

Heimild: Link1, epli skjöl.