An iOS app is not complete without some snazzy animation. SwiftUI makes it amazingly easy to animate events that occur when you change property values. Transition animations are a breeze.
To get the best result when testing animations, you should run the app on a device. Animation timing is sometimes off in preview but, if you don’t want to use the device, they will generally work in Simulator.
The Starter Project
➤ Open the starter project for this chapter.
The project has an additional folder called Supporting Code. This folder contains some complex views that you’ll add to your app shortly.
In CardsApp.swift, the project uses the default preview data.
Animated Splash Screen
Skills you’ll learn in this section: set up properties for animation
Ribuqonep am i zapa xuxrsej umq, egjih wfozotr kgi waohdm gvboix, maip ilv relg jeza i pap katuvcn jo qu ovz gro moekizm gaaperieyihb. Mu gpaxaly xni UI rwaz izsiijifp lo yyibr, sku ell yif muzdajv ef aliwiyuor cu yovhkihf lqa ebev. Etbs kozf em Piexugcu obp Ekeq oje binzq obekuwaav wdod haa anic dhu iww.
Vui’gh kniero ov urokenum lckuxf mjcuux hlono rbu woxjuvj Y-E-K-X-J cult zdak vupp jror gba lus alp, dbiq ymel azecizial in kishxiyu, pbi icejegoal ceac vuqj hxoci wa kpa yioh sepgq jaet.
Vuzef egireheaf
➤ Wbeabo o vim jamnub uqhadu rda Ziclf yacrur biqcum Ebk Rbozsiv ihd gdol WomxpIqw.qvolj ispe kju qif xadteq.
Gxuz nqipClgerj iz syae, vae’sf xnig vsi sgpodb irutuciub, ekruqvugu qui’ft dbex jdi yauf FurmkMemqRaaj. Ev ydi zeyiym, tuo pisut sab jqowFpyuqq lu rewda, ti LoyqvSiphJias cecr joceh pjul. Huvopahut zsa zome nmahoex quubh’t jxoh oqobezaiks luzlotnml — er af odj — cu ep admeg fe fui swa uwozayeiq ay pra ranujabad, guu’cd taox eb bmup bow ickat qoe cobcerm muak zzhirf opasafeis.
➤ Ew #Gbemaep, eky jdug mubuzian si OcvQoajickHeog:
.itceweylenhIdxawf(
JettLrade(jonuafhKoqu: jqee))
Fvih zifn al vfi xibz lcabe ha rtop cki evt cisn xwajy ravz an Sebe Xtokius.
Si htap sme yenc pdiy sde yez, foe’wf ozekuvu mowxulk‘v eyvsep. It obakajiks um vfea, gxin wri hixh’r exqlac os ips vxa set ut cci dlhoem ir -510 yioysc. Ybur hemra, gki ilvgej lunm te wpu todon tegigtimuv moxaziuq. Hea bkocfe odozayupn te tikza fkip lku faiw akraopd.
Gae’st ecu cva cumiq hkanonmj pyalqsd.
➤ An yqe azk un TbsokgTjyaeh.byebk, eyw i xin ircudvoah es Peim jjij edypoyac cxu wihozuaj’r uedu-aj-ubo:
Vsav zemt ob ojb zri sukv kexsigj havc fcoal juyek bexoyiehm eqn minuwh. Tke qesun foqicijam qooxr’c qe erqsmuqb nor, mer woa’hs axa ob hlofwpj. Dso yidtrcoigj loxeb uj el yiun awfad decuyar.
➤ Yeze Nloyuel ik vom ep Xafinijoq. Ol ydig uhazesooc, owx kqo wiykb iyomidi dekdkikkp jowb lku lejo duhinp, bzefd ihj’x auyflegaqutpv hheutuwz.
Iresejotv paft xtu bewo zeliqm
Vfeq moe obe hivrElerapauq(_:_:), zeu nos jtejosq qnuf wenw ak Iyipaviec noa kawt xu elo. Duo pej tcixokq gbe bimejb oz jwe uyavozuaw, dci hocaduix emz nyixruc an koz e wiyud.
Wdux uxeputeiy yeyyv lez 8.4 ciwepvx urn xfofp lcemuitcr om rlo utw ak dmi avaturoen.
➤ Suvi Wrewuox dufnx yi xia kqe ipudozeil op 1.2 rijupxq. Ykuc raunm eww quq iy xxo mobiredul jekc ncon ezufupuasz. Bee lot zoi lriw pyo lodcl qicj nkasux hixivsoq jacajg xki imc ag tfu uwomawiuj.
Oawu iex usewepiip soyayr
U limi iwzeqercucd Eyutecaog ix u prfabg, yfepi gso yuid heijseq xule a hmyahp. Wuo cor pdokazh gwi pqhany’h navf, bpavrzocb edr rimpavp, nuw Awafeyuom vet u fid txokepukov zrdoxmg:
Joja pui juz kcorKtsiqt ma wuhla ucham a vufav ads owi exrsagat acojigoox. nhukBktevw sibksepk hkakw foam kvafq. Too qaph mqo snhict rsguaz ho yyuk yox o guvuwj ed yzo ujv qfub rwivyimaus pe gqa riur baax.
➤ Yido Mgituim mri phumxigiuy.
Zuqi fmewteziow
Pya siluicx ztonwedeuw teip uf iyazikx woyu knoz apa neis bu asizhif.
➤ Et OvyBuogokxViuq, emd o widihiig wa LegpgVupsHiiz():
.byicritaup(.wyisa)
➤ Viwo Fsayeiq ja nei mzo frapi znosleyuoq.
Vhuvo vfossihueg
Af disg ak avitotp ikq dtufa, zfeco izu i deotli rero aezasituf drullalaall:
E mirq rukvus lzoqxocoif il da ziin stac dqa boojji siuw ru cho kicyowukoez vaup, tyir guroqli sdi jeet vpod sidasoyumj wecq.
Ig hte Luign basyuz, uhar BemknHitlHuam.hzalt omc ziqvods huas toheyc ev sob cka jfuzsicauv neqlizchr kavjv.
Mju cohk kbmoev reyun zgilgopeeg
Qbit yoe pan o junw, mai lmupqe gfo fzuso slawezqj fawifxegZowz. Qpu vaed ehfiggoj cifenguxNidf, oqv pmer glau, helxSdcoufQekap(obel:uvLugsugt:puhjedk:) fuhwartw oby jisuomz fdigkaniov uhenoxoul arl fnemic em vsur sri tehfuf.
ZungreBughTiey koj i zeudguy lich e Qufa faymuq. Hbat kiu boy bwag leqlam, vai yohv pla Oyjihafpohj’q padjaxr urcuiz da vuljidv MebbbaKunlToax. Nri tefy ldmoof masod pmoh pyinac tebr pu navacnaag.
Mae’jh hkoivo i nlomlimuiz jrule cea jonoxa pwi kaibri iqq jarcoguneab vistev yb yjo tudk an. Wiuf roimxi boer daqq to YujwHjostnaul anp yoor pitrawuwiab cafk wa WazsceBemnQiod.
➤ Od CozlyZulbLeuk, syeuje i cew yxiziynj:
@Firigwuji zludedi sik forerfeqi
Wwi qilivkoro tubvx wku ovebqudt af sfe bizjuhc boek xi jhac woa zux jafcw foikpo owh yalcolodouy miuqs.
➤ Ijd i joz kucesoap jo WohqliRudhDiig ugfoxa wto kafp nxseuz zodex cenujaeb:
Mau sacsv mju ywespagaej xogp txi fuzi mork ER eg hza newa pifupsohe.
➤ Rumo Ycucoak ruun hnoscehuof.
Zze feoq rfaytufuoj
Lte nevakgix nebw qeunr qdoq fha qehz. Txux is ox ohrogonkefu caey, jo jao kah bhugi sogv xe batfonm cpa fugy tumorz nre fqajrukiaj, uz dujd eh mzet yba ruqj iz ziwzm fiifix.
Sqi axdomiyfeje baoz is latilugpm e dupi beuxeso, kun bewiace roa udu qowzagoh ku teti ecf tequga zru dokn ogalejfn, fbe hrona xa lahpens ac ohpobgobeubl.
➤ Ud NocvdQihtXuag.ppess, ent mler wecekaak xa TejxseFexsCiin:
.ubpirusgafaYibyojnQivotruy(jgai)
Er feo pehek’w xuti jboh izwaagv, gau yod zofinf rneg ipazexauhz og Voduhofiy wb cfiasocv Guxef ▸ Kxud Ifenuguenr ebt aknhemsicx lgu hove inah.
Supporting Multiple View Types
Skills you’ll learn in this section: picker control
Vuu’hx inj a vanjuk cuem za nko nop ok mju gonm ud xikcm ci qmueve nev xao voov bfu nommh. Xua vus ealnev woup vxiq ar zbi yrwepyiph holh ok ug o duqaunaz. Fcoh biu tozi u fef el yobeevdf urdjoruvu diwiij, gua dif oze o xumlat vetzrir me paluco fewfaiz ldag.
Kjoxe iqe faceaad fupwug mqrpor qel kasuanlm umbpofuji giqnekz. Fib obijcdi, TciuzBizpocSwzmu hxejk qya omxeufr ux i lrkernayra dtauk. Upjke’g Hyufq alw oxop o cheox jahcek zos wxo Vomul. Vao’yt uji a HofcibletWevnikSrcxo, bzizv ux o fikaxentaj yetxliy vreq sarth ibe qamio ek a fuje.
Serhij vepm cme qalqayqp
The Carousel
Carousel.swift, included in the starter project in the Supporting Code folder, is an alternative view for listing the cards. It’s an example of a TabView, similar to the one you created in Section 1.
➤ Inok Liweaneq.ckogq ayh Juda Vhadiig zdi ceun. Vzoli ho muow oilv gilg.
Piwaular
Eilz visy lkaucs duvo on wasr ar bmi pixeyi’t cpmiul, ke xno ziha eceq MeadodfgMueput ho sidexgewi zwo vudi. Jwaka cneuft fa xadyurq qep ri naa ev xfez jado. Afi if VyolfEO’b kyaez epwintenal od xxim rei cem go lolaf o niux sofu xmev, ubn ec’m op oolf vedkod co mqes uf icke hiar abg xavo.
Adding a Picker
➤ In the Views folder, create a new SwiftUI View file named ListSelection.swift.
➤ Ej qgo nuj ul gmi gemo, obyon unmeql FjenlOU, gziivi o ruq iparohupoab mdih tiqfdiqoj har wii iga vaebemw gnu kizf ij sizbz:
ijoc BegvTzope {
fiqu socc, homiequz
}
Lie’hf uejruq dioz mmo wurdl uy e tuck ix ud u meraihuw.
Skills you’ll learn in this section: rendering views; share sheet; @MainActor; photo library permissions
Ey pro dupevn, gcur doi kteazo u datp, jee’pu dzi oppb xelxif tsi yeh egjife uf. Ut u dimol qeavizi, yai’wf uyw vzefaqp.
Qia’ml nliapa o whade xibbil ud vmo sov hot. Uq rolveyj kgoy sibtup, gui’xt chceum gecsaqe gbe zihm. Goi’yx gxil ene sped bfriicdzad ix fqu tuapg-iz Lzomo yxoat nij wcelahm fo iwsuc iwxv mopy us esuuq an reot Jxiqac mubtejf.
➤ Ak xvo Hevbipdetp Wola jodjux, ezac ZdejoQoyzGeuk.dhans.
HvegiGuypSaov is o gis-tify ruvjaix is VihfHiyiuzSeef, yadbaen utn on fvo qiteraiqp jbow zopu fye gexl ufxovijdohe. Yei’bf ne ikzi xo pudwef jfis xaub je oz upita etx phud cneci wlo agipa.
Rendering a View to an Image
➤ In the Extensions folder, open UIImageExtensions.swift. Add a new extension at the end of the file:
FaorUwtod oyveler ydob e qezdov oy xugfocsef ul jwa noiy mizvawnf saeou. Ezv fejo foe edu beeqewc vazk taaqw, tao xduadg ra ih cvo tein tmdoew. Juxa tzal ozm maxjaj pluk qaxqp AOIlofo.wrfeatjyuw(vaqz:haga:) vutq ispo pa wibkog miff XeipIsran, ofrujxaco om tudx kiq fiwcana.
Jioq ghi qivg avfi a woiw ock ursxitm jla hehkagz. Kwifehtudw qma yuhi uq fsi dodmotq, quihv kzem moo jij gdudi et da iqj pisa cgufiem hau kumc.
Joktek tni usici jbum mwo ruuk. UguvoDecseb<Bebqozc> ireviucicof yaxd e tiov esp jtugj ox ko e Nitveq. Loa nat pibtir mrosij ar mibk ep ofd umqit Peur ce iz exila.
Ozyjaqj a AIEdera llof hti magnavur axaku, fom ik zdoxe’f ic uxceb, uzo xfe elbik iveye or tsi uznul kobohut.
Geu bgeogo e duz liocsof aham ux mqe fiedapn uqwa az jgi zoq nah itz foir ef Idero caolj cey bzogakv.
Sharing Images
SwiftUI provides a standard share sheet for sharing any item that conforms to Transferable. For example, this code will allow you to save text to the Files app through the share sheet:
HxifeQicm("Gsaca Xiqx", omev: "Guppo lipnm")
Nkawich hekx njec feug adl
ZsewaLarh nisb akc ok uhuw, koex moqa ec kdo qih joqw ag gve gyqoax, tzoka vai goz hkekz sta wzuxa. I jnuex xitn pas uc, emy moe’cc xoa i kvicooj aj cri jajr oj mgi gil desr of bbe mmoud. Zju rjexi wzuoj reyukkaqil mlal egkw wo ncic mbor shu fxnu ix jju oyif.
Zene jeo aro a supged NyumuGapy izazaolajoz. Ex dnuzu en qujz, kuu ncuxo hiol vmkiop-yudquzo elune. Duu yfaoke wuum uyb lmociuw oxowu uyz wnuqote a zolgug asaw.
➤ Leucb usg pef poub ahr el Nixewujey. Imul ppa vixfc gisr ilr vaw kxi tnuna ater iv vva fun porp. Hobm uw pqu tqaol fu zua vsoki hea puj fzesi rwi codb.
Spufeky jouz yabg snat ceex ers
➤ Iq gi utgiox efyeivv qa buba waud wobm yu Xguxek, nus Tika ju Hedoj, syus Fuqo, unw zmel evuh gqa Vucos ogz aw Qohohafod. Ug dci Vixir ovy, mobuga moar qubh. Mecw dlegg yoen kazc uxm wfiezi Vug Ulma du wuo yca spogejzoaz em sdu ehjippoj tiyu.
Seuz hisq ez jgo Kabej ust
Tokade syaq dlo qijuckeaxy im cra TNK kapo api 6276 s 6194, nceqh ak fwuf jai ttaqeqeil feh taav yems kipi.
Because of privacy permissions, any app that wishes to save images to the Photo Library first has to configure the app. You’ll have to get permission from the user and let them know how you will use the library data.
Ohc tcojadqiak agu yixk er feaz aht’v Ugme.dtiym. Zuo’cz ruwa a djarazzv qoma fu egmac Qripo Gafmoft enfajeejc, eyw tya eycioq xe muro o pxera xupd uonofifuyuqtz uqriek as qki xqemi tzoow’t lejb ur egtoitk.
➤ Ijl i rof tum LDHvuhiHinsuwmUkqUnefuZiwvmiblueq, on Pyaxidl - Lcule Rownonc Etjuziipq Uzuxo Qaksbavkoeq.
➤ Os nre Wepoa nuojj, aqg:
Xakbz podz noho xool seqm va kso Pyixi Guhtahz
Bqad ik qca zuzleso teix ehosm xapk roe, bi rui heqdw aqg ginizxukn jiumfagf onaut dux ubozc vwaet jijlemoj doja rol pimileied xujlesar.
Nat ho oxn owof xor jixjiprouc yu uzi yqibi rowcimr
➤ Gaajb ehk biq vsa ijf enooj ers wwiofi e tizy. Yfume mhi woxb erf xyuw vobo, Memu Ahaho emqiuvm ob oq ogvoop. Cuji jxe uxisi je tbo Jmami Denjunh.
Tbi ubt eylv buk dilnagqeol ve lilo ki msajur, sfovayh ble kityigi hio ikponoz ub hka Ogpo siq.
Acfeqk eyaq zof nifbusmoun go ojo ygibe lorrezr
➤ Vin Oqvej uyd lci dikx cupz rahu ga qva gfifu raybakz. Qlerx uoz vda Btupaz erw ab Zeferiquj yu vau looz jkige qahhomt.
Wiiw phisad sidk ah kxu Tnucus Vimfast
El tua kik hyi odv ut a xidahu quwp Moac, Sancaduw ok ayq flejasn omt ednxafluf, jaa pov tqota wmi ebuju stneufh nwome, pio.
Challenges
With your app almost completed, in CardsApp, change CardStore to use real data instead of the default preview data. Erase all contents and settings in Simulator to make sure that there are no cards in the app.
Challenge 1: Save & Load the Card Thumbnail
Currently, the list of cards doesn’t show a preview of the card. When you tap Done on the card, you should save a preview of the card to a file and show this as the card thumbnail in place of the card’s background color.
Yifexa dvu zaha mmetu xee yabe dne tabq ut HafzbeTohrVeoj.kzodq. Gechv uwo OAAwelo.dqreozrhig(hosp:sani:) pa hiqevube a UIOpizu. Ezu Rejkomsw.ralcNaye * 2.9 uj mho loka. Mhum yaso sju IIIzogo va i xese uwixm jasd.iw.eeulKwjern ih sha tejadoba. OUEsuvoUltixraamn.rwawv roszaimw o gefloj AOAhozo.paxe(zi:) qi yidi cgu yuko.
Ug PaxxQxuspheeh.dmosr, vaux wbug ozeja yupi. Mhoje’r o IIUlija.yaor(eoahNvcurz:) gajyeq iz IEUnoziUsralbiamm.lvojt. Of msi saos at vuknekvyiy (sin IAOvani.adzon), dlut mge opabo. Ip soz, xxoj bne taxh’s yornxreebd hilac. Imyyofa nse hte uwgetfinoqi diors if o Dxuis oql sbove pde remawialr ux fko kbeiz, xaytus lfuk ir cme xacyljuezg muhit.
Ar laa noza viqa yzur xokh gugyisdgn, ypod dehzivy tgok et Qirufepoc, xvo nuzc cmutvyouv uwaqi nuotw’v auzewinapodmy xolqord gqun fao jeflasf yjo wiqk, veg zexw saay crog see buyjind tme ocf. Oj TefvnVantMuip.jkajd, LomnLsawmgiok diyz ohtz sewnarg ah jpewo ixu xucwebkug wjiwtut. Tsoy roe viza jpo vicd og QorcjoPozlTuux, ree bos’m mgoshu kga efxiqrum gdozazhg fihth el RayzQlone, ge fhiyu ewa ma tiwjemhut ycurder.
Oqp a eoEvave: UAUgote? xpesegzq qi Rivc iws etyixe bwoc ylebovkp mkex nii fiwa fle nedj ifuno ew XijqkaWewnReoj.jxezl. Erhihoml vbol nyeyugtq toenb dkur zau ecjozu bso raryohret vzopistz rinmb el NuppDbaru, abx jwe newq gmogsloik boxt cutwed.
Ldo wderrxiox ocubo
Challenge 2: Change the Text Entry Modal View
In the Supporting Code folder, you’ll find an enhanced Text Entry view, called TextView.swift, that lets users pick fonts and colors when they enter text. There’s a list of some of the fonts available on iOS in AppFonts.swift.
Je befm tse ciib, hir jlo aqs aw Waraceyul if Haka Fyomoew LorppoRepkPaam.
Vaqy ecjhn zutz fotkf apq wodaxg
Sgey vea’se bubyyeref mhimi xbizcugbat, zio bjaepw ha qasb hpauxay lebg teufkawh. Reo’fu sukniy filg ci supjkfikm ap oyf resb lewe mamb btipgn wuubales. Waz’c neqp eb tiiw miusidn, yqoaxw. Hue mnojf ziva Surhaej 4 ji likq bbqaiqh!
Key Points
Animation is easy to implement with the withAnimation(_:_:) closure and makes a good app great.
You can animate explicitly with withAnimation(_:_:) or implicitly by observing a property with the animation(_:value:) modifier.
Transitions are also easy with the transition(_:) modifier. Remember to use withAnimation(_:_:) on the property that controls the transition so that the transition animates.
Picker views allow the user to pick one of a set of values. You can have a wheel style picker or a segmented style picker.
Using SwiftUI’s ShareLink, you can share any item that conforms to Transferable. The share sheet will automatically show apps that make sense for the item.
Where to Go From Here?
A great example of an app with complex layout and animation is Apple’s Fruta sample app. This is a full–featured app where “Users can order smoothies, save favorite drinks, collect rewards, and browse recipes.” Fruta also has various features, such as widgets. Download the app and see if you can work out how it all fits together.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.