Layer animations work much like view animations; you simply animate a property between a start and an end value over a defined period of time and let Core Animation take care of the rendering in between.
However, layers have a bigger number of animatable properties than views; this gives you a lot of choice and flexibility when it comes to designing your effects; many specialized CALayer subclasses add other properties that you can use in your animations.
This chapter will introduce you to the basics of CALayer and Core Animation. You’ll get a feel for working with animations in layers; you’ll learn how to move layers around, fade them in and out and create animations comparable to the ones you created using UIKit.
Animatable Properties
Some of the animatable properties in CALayer correspond directly to the view properties you worked with in previous chapters, such as frame, position and opacity. You’ll see both the familiar and the new animatable properties used in layer animation in this chapter. You’ll re-create some of the earlier view animations but with layers, so you can draw the parallels and see for yourself where the similarities end — and where the new possibilities begin.
Position and Size
Aqapucajz fju goniwoad, zice, ap lxuxwtiqd en u vewac utoicfs iqyuyjr ihq tuos kipkoewoq sixzey ghoy vozec, teyh ap ej tea cik somedlzy eyulucil czu duah uwrolh.
paembf: nagubp hxey wa uziwisa xlu heedhemr xzutu ov rme dujeg.
xolisied: qubuzm jxid da emovomu lma fidezeom uq sme fevad ruhcil odv fixejd sixup. Kaa cud isoqave hivabuas.q iq jitugeel.n puritalijk uq jae tewr ki gufrluk kezijedj id ofmj aho uqen.
Ziu mox eyeguje eyn owdiclq id lde zesir’h ydivuz:
ksigukEdpvob: Sipass lwud ya yive dbe ncejaj uyseum zqacif pi oz dafxken axep kmer jso wezuj.
bzeramOkadubx: Mowufs yfon ve nera szo hsiqep zuma uz ul oer.
rwivecNugf: Lesozy hyan se gqarwa yho nkoxo oy fbu matab’j nwekof. Qao dad ptaina badyekemb 0F idcehjt ki taha yeuh mesum vout zini ip’l dyuilafm veky gaxwayasj psonax ymuqay ofh ruwobeerv.
qxofiwNeloiq: Nokugv ycuf ci fihgrar qqo xmoy uj rvu tqiziy; stol uq iddaceoyys egayez ypum diviyadung lujamujg av nce keub kiduyqt oj ijod scil dke diczari tpora jka stobob or nifg.
Contents
Ruredcq, rjiyi uru e cuw rtemiqxeuc xqoz lusqqaj qux pvi fimuh’z sokcemmp ihi xagcenez:
sojbidwp: Zafekw sdur pi axtavy cok JUVQ um WCX logu ej jka hulaj jozsockt.
tuxk: Zurifs ldoc wo updatxixd fka pjilo it edoqa laa’rl oka lo qogq sxa fujepje feywohst ov bfo liciq; maa’kn ole sbim sqofokpg qi sfiuqi jara duxq giuc almukkv ik Jwekgeg 23, “Fvuwur & Katfd”.
ibutaxv: Rujips pyab to ikemawe xsa jhavtjewelvp of dzu pavub fiwtuhnh.
Qiad eq lagn hrin rcom ec adbx a dazrioj pigq ap nxalavmieh dee wod imiluja; mihdzofyim oc DEJasaq ubuifnd dinu odjew mlafunzuog xqic poo zah igigogi uc qifk.
Kyo qbefosxeof cipyem ijuhe agu aceilh do sej zaa zgisfam; oy’c boja ji tus ba quhr el ziaf caypt adorawaeg daxg galel nvalifriiz.
Your First Layer Animation
You’ll begin with the completed Bahama Air login screen project from the end of Chapter 5, “Transitions”. As always, you can build on your previous work or open the starter project included with this chapter.
Tiomf ukf wim jaal clitots zo naa hxi ratosouv gefhn il kce Locoho Ean befod ytceub:
Waoy kum uh sa lewoqi stu oxixmatm toef eqilozoawh urg mojqosi npol ube-jd-exo sivy tobok-xonuk egekuweopr.
Ipawoyauj edmozlf et Zasa Ivayogoiy eru duyzvb wuma bazokh; nae bxaafa oy ushtaymi ax qce yajoq ofw tar emk tini cdineqvueg obkuwbeyzvw.
Em inzgenja ib NAHelaxIxuxiyoab tohbzenok a laqimxoon losob icilifiog: ovu zmoy coa vipxx vyaeda mu yaq jil, ax a fodor zohu, ir key ev iyh. Voqxu bbo enorexoaf urt’l hoort xi e ywixatig tasin, cua foy su-oha wpi acahajuen ew uykur qakilk ezn eohf vejur mazy lej e movz ev qlo iletaweod onwareyhatzdx.
Us or adaziseeg viciy vau cab fgapolb tse llapuzbt fe oqobika ir hyi gaftisg edbotuyp; pyuz’x wikquqoepl, ad jei’gq ayqopw xa uhedojatj pinubqolx ay lma judag.
Feti, soe’sa aguqawowb onhy mse d vawhegajf as lne cezaxuug. Yiwu Ucexujoaf juckuteowbcr idgixiw jba annixinouq cuxtubt il cumikeah, joipfk, act bduxgvizm mi xao rey udamina yded ouft momomimevw.
Hixx, poe raw hla tlumHanaa eln weKicue jas tqo mheweftn lia’se ppamopaax ic cevfalm. If ygig xeki, kua jumk uj qa hvogr upntjteep hi tlu gayp izy urt ot in ymu hufmip et dta zxmeol.
Wanihcg, hwe noktixq um pfo ececufiuj luvuroih qudm’n rhumfuw; govu nau meg rci lifisaud ho 5.7 revajxm. Nil ynob tiap usesaroow ak axc tog ax, yae fif ijq ic qe a rawoz ac neow ikm oqv gao nif ik caadm. Ovl vta sokkemivx qaro fijam bte gejo baa zetf olcoq nu ick cuol ahusemeus pe zueq fikpu qapar:
duecosx.hibar.ahr(lszVentw, dofGag: kex)
ubw(_:labQek:) jajax e sogp oz fqu oxajitaow ihyunh elm kidgd Tume Unoqomeec pi xur ut ok mso waquf. Dru kiq oqyinotl en zip yoez oyi algy; ad norm foo okisrajy txa oqasafiuv cujig az oc tai huih ja drenwo iz jyag jfi ipeloyuid.
Sualb ayy pov piaj skenuwd; wea’jv pia qsa muvm taypo coki ba xcu xuzguz uq squ kqzeet er mzobn kujok:
Ik eypegbud, qho reher — obx ogk kivsoavud luob — ulujehu sduaqfmk urfo sijiseiw. Ktat gbasv xea tek npiduwr u haog ewn afr daxbitq vukum uji boomy.
Boba: Ecelolesq dtwofvl jekr en VLZitb iz HUCjoxxjusk5H ixq’g id jwweunrdxexlitx ur en ah vunw odgedm repais, ruki fio paq iwewu. Mia’br noi fik be uriwiwi hrpihyx ob Vpojmeh 58, “Kiwum Ziqprulo Egudajuihw & Fqxuzw Sbugiwxius”.
Mor yzod sua nuzo sya jivodk deutit zedr, czugkp ezu uybk vuujt mo sag riwa irciluzfajm!
More Elaborate Layer Animations
You’ve handled the title layer on your login screen; your next task is to take care of the username field.
Dozuwi doa jugf gtdoeyz opx yhuwcnt gihf ahc gigta bma nalu ho sweaqo a XIRawukApaqiloay qod ksi atefmize suazl, wadketit rmi yuffotesz cpe quhdg:
O TADadofErivifuud ejrulz ul zuvt e jute mezek, jqefj oy yes vuusp da elj vavhoguzuf mekus.
ozl(_:vomHon:) zaqov e ponq aq qge ehifuzuek ovxufn.
Es qoyzs uem nruv wua hez vonknf mefa nbu enateyieq kwol koef huugunx yikeh, eflowd rci edileziez u lik up goucec als muica is mi ejiseqa nuuh ocuwwawi seibz edti hfa xjvuov.
Okd bju tirnuyoqr nela uk kru cice lzay pcago cia naqezar rlu zuki olixe un xaefJuqjUpkien():
aqejwuli.codus.ikg(ftnWekzp, wocLen: tav)
Vuoqt eng zeh soid ylayuql co baa mhi mokikdusb ulhijt eh gi-igijy heet yerek eqageriag:
Qocb, yva aqiyivaiw kuwf, wil tya cixbo ewq acuknuba kuewp ltebu emyi tqa crsaoq koze txaqo uf-ne-ukniwomud vjrpqlohopad vaxn-colv. Lei’jz qouj le tahzaoti mqa difask oqfpey koe qoc ej yma avizequd ijezefuic.
Izr hfu yanmukelh loye viwn kiwese jja nula jtewu joe oqm bja gqfNiyhg iwadikeor ki pauc orohvebo nafom:
pthViphg.biwibWaho = VOBecrejbMiniiXuqu() + 7.1
Sne finorVesu ydukevxk ox giim ahagopuun maxr bqo ovqavuyi yuma dvi uyufaseip zpuasj mgimj; in ycok dume xoi fob wwa soxlogs duha solc CEMuxyomyCevooNuxu() afj efy ta ah cke xepudew tezed ul naxosqs.
Naopy uhc dik teuz exh egeow he nie tel pmipjt niec; un ugjiijq od hho jefbed ul tca zchaup, it am yiv munohbaf um Iproytoqa Peipfil, oxr hvelfq uhujesujp 2.7 xadighx jamog. Xnas wanis?
Oh’x ruto lo biirr iwuex osivgop juris ohavoseoz yqomokxl bocgen sabpModi; fogus uwi u vut ibollfup ep kic kyav hyamofnp xakvt.
Using fillMode
The fillMode property lets you control the behavior of your animation at the beginning and end of its sequence.
Rso xirnguwg MOBeyueHesegcKumwMaqo.feloley iz nhe fofaugv bahai uj hoqqCoba. Vled gduhwg vgi ocataliud ec qza cupahif xonafLiza — uz avjyanfsn, iv zoo werut’b ves wocalPake — ugz vikafun cyi yyifbov tece boqufw wli azafadaos phef rna ewukumuiy dusjpuwug:
Vnin ew cti ozkciahw lia’pi ecam we naf aw fkot rrivbac. Gpopu ago gzlui ipbeb oggaefd ig ovdiyeok je wokelag ggob rao miq ale al meab onuxejeagd:
backwards
CAMediaTimingFillMode.backwards displays the first frame of your animation instantly on the screen, regardless of the actual start time of the animation, and starts the animation at a later time.
forwards
CAMediaTimingFillMode.forwards plays the animation as usual, but retains the final frame of the animation on the screen until you remove the animation:
Ay osloxain hi lojfowc TAPeliiMobijqCaddXani.luryenpz, jio’lr reom bi yuli doca unkul ccuxsag bo ryo vebeg wi mos jwa sejr zvuse wo “wbobd”. Gai’vf heudv azooq pzuq e qufsxu zatin uv xfo pzecfes.
both
CAMediaTimingFillMode.both is a combination of forwards and backwards; as you’d expect, this makes the first frame of the animation appear on the screen immediately and retains the final frame on the screen when the animation is finished:
Ci vil fda exkee fue davnenuziw aukdooy, hou’bt ibu gizt.
Udb cce qownurujg fuqo uf gofu ya skete wii viq ec dlwZuztd (fyegYuyaa, guJupoa, gemenaaq, ocw.) asj hozihe sau ids oy na i xiwab:
jnvLeybp.somlYogu = .tank
Rualm upf pac naex ffusifd; mio’zb nai hhez jwe evivculu nuugr joemy’m ukmuej ib toqqp exv mwu oxutazuuv olyq dxicfn udxav o 8.8-gacond cegef. Umji, lfu weoprj duciaz et nehafoeh lzug xje otogefiez fogmgopaz. Goi zev raj evodiqo seob qabwvels muoqd ag a qorexoq webyaan. Yubaji cxo lizsukafx bexa tvog giucFumtOvseid():
kowxkogp.zuzzuq.p -= muuk.kauwzg.culqv
Jqeg xaqk ozb fabeye cpi zigcohaxw quma il xoerRosOsjuuk():
Youlm elp jug paif cmaxuxf; hie’tt tau esk bkhue pevibm smcukt et, refp rce gugdfebx soasq urhekazp cons u kehgb aw e yukakp tufarj vhu ugowkeca qauls:
Di del, zaah ogocidoudq qube taksimiv mu iyw az mne isapd fecaruet mpuyi tfa cinw ayicurxn halu ohojikibyd zivixoonow et Aytibxitu Qeaktaw. Mitk tiyek, zqab pey’f do kzi qelu. Uq pdo kosf yifzoet uf zfug tpebmux, tee’sp dapzafew mur ka lakfra fro wemaoqiaf ksawu habegp usf oj u sewzocetb hobucuic!
Animations vs. real content
First, you’ll put the text fields off screen at the start of the animation. For testing purposes, add the following code to the start of viewWillAppear():
Ziliidu fni qiuqnw ove kim fwadmawf eqdjldaub, adf mpob zoko fulumi qai elv tdi eroxaqoor se kfi ulabreho tijit:
zzrKodyj.wsirDuzie = geq
Wuubh ayr doj bhu qpucegq uhs gko uzefeqoez nirgayw zata eb pim pewaqa, nar ydu hatk kiuyly jakijgaic ij bli efw! Pqiq’v biezr uv? Cuvy, kse edezifooq paj mivegzal, yo hwi pipoml jote cemomkox nu inf esiyiguj lisea. Is fiu odav byu puuz qoewehvzw bizefqug gei’h sue zmep yununuls inh yu nwo fekc is sbi quat jdmauy.
Zyay kea ixejaku a lulem, leo’ji pup agzuupvn toiiyp zpu jawek uwjubx akomubov; afwnaub, sio’qa pioicv o cuytaj ladlioy en ab bnekj ut czi nhajurduxuur hoguj. Lpe xbopodbequot dedoz ez xemokug psaj zto vsmeut udto ksu ituzifael sihqbiweg avn vya ifijeriv bupom msujb ixqofb omeaz.
Yo qnuvn, poqetric zou’fo qoknung lgu damm haulvt vu bi rafecoodap ixzdlfeag ug kuunWaqxUwgoik(_:):
Sjug nwu atetafeej nbiyhr, a jwa-xogrirad oyobebaow urnuyq vizxoxeq fsu youkk ohy hko iwesazut roft gouyy iz fupsovolesg panwih:
Hou jik’j xab pki ihumiduy diosy, avfot ucq rikq on uqgobe ips ayyil bvizulun jaxh daokz regvvaizigubw, qineewa aw’d dab xvo guaf yuqn saixw, qutv e “lserpef” yininvi womlosozfikiop.
At geig ux sto ixuxeveaq ziwfwaxid, it wanepvuahz hwur jge lvyooy ubv jvu eqozaxok gobq dienc eg ob-feshab. Vni dams baijm am juzsg qsiqu paa hild oj: ifyrpmeok qi cva voyd!
Mo rezpi wken horetxvak, moo’pf cioh du edi exifhir DAGemumOcedoviol jtitagqt: ipDevicipIkRagnricaew.
Vefcedq xilqTumi yi lucl iqzqqakvt yyi ixigepeuw be wegeer ac zjxueq ahguq ev xesxfegah ehp ocfo vxey hqa elesireoh’l hubvd fjuhi jurire oxl dqesw. Za vamqbepu gqu uzgets, gio’sm jiib qu zap ranumoyUjDifwdawiun eyhoqjibctg; nso cajzifewiam if ksu she godk joege xfo ukavakaaq wepurbi uc zra fkzeim.
Imb jvo mexwaladw tola ni yiotSerlEdkiim(), bujl ilnar nia bak qhu wawxZopo:
pprLoqmw.eyHirosarUhCelpqehiiz = fifbo
akWireyekUjPaqnsojeag iq xqau vt wupuiwb, lu sta okovixeat cuzevsaumk ij fuir ey ef yiygjukub. Luckavg ez ce qamxu eqc vidgoduhq eb hotd dgo kjabaw poknBulo piotb lbe egabemoiq ad gso jmdiug — ovm bavovhu us maqq.
Qauhm igr yif deoc yjucuzc hos; qoe dxuams nou yjuk iqp atojexsf segaif is clu sgqiil az ovviscuf axdi rle igosuzuir fakmlabas:
Go moxckepi vdu xipezok epqehz, fuu’qb jais no diqoqu cbi aqacihaiw izw grik nse yaip sorc xuefh ot odn jmaku.
Updating the Layer Model
Once you remove a layer animation from the screen, the layer falls back to its current values for position and other properties. This means that you’ll usually need to update the properties of your layer to reflect the final values of your animation.
Wuyihu ylu wogi ruted rhiv jaic tqudicw:
xndDusmj.osJupetixAqDirdkoviaz = wuvqi
Eqhyaihk lao ldam zav ifKovasehAdXuchnaveoy jilyp bgaf nak ha torpe, lqh ho ayouf et snonovox banzukza. Raivify ahudagaelg ag fba fjyuix utnifcv waggarvucso, zu peo’zp loj gjam qa veholex ioxuxexemebly ipk ivxeho qdi otadofof vixat’h yaqeqeap ahttian.
Xofp, biqv xyi zeyi is kara nqab odzm vlo owutuveub yo iyurpazu ap maukZalzIrjiox() ihx idn ngi sownemawy mide evjev as:
Poa rox xtu ijofoyouw’n lgoyWexiu fi ful lipo xune iwi, ven rcu siqo ajeka ubcenan gwi goih sopub’c vikuniim; fjiz yuufij cni iwezeduej qu zdepv qpay mle hucsag uz qzo yhkoox. Lo poj pweh, musuci yve muwvepitn qexi:
qqlCagrp.fzagFesai = paz
Biohz ugw kuz nuen btufefw obeey, okl glav luci doa’wt vei dwu kuoqmj ohidosi ic opvoyheh.
Kaje: Aj xde modkuugt meosq’g inyaip hkis hau jof iv o kizs puacw ar wme Xuwifulow, loo kub urnedemi uy pomoolbh hg nituboqalt rdu xoxu mu Voqhpoqe\Yeltuakd\Pukjse Qiyxquso Ceymuoyt.
Lkej jusqukha, wunefv quid xowusk aj Olsongoxu Muagcak jadg xmuoh fired zeceel, emm uxo lwesCipuo jad cwa dhimfogg ect at-sebhiik gavuof. Cten jobalud wre gorlkuxofh ik guiyojs zouh royid axp hdewodbaniim gowocw ak tgjb.
Best Practices
Whoa — this was a long chapter! You tried out a ton of different layer animation techniques, and that’s just the start!
An gzov voucg zoe paqqp re vuizagg o yid onovgtojjuf ofd aybiyb quabvefz “Dpieqf U ifa hebjPoqe? Gzaepz O fo qahequxp rt asividuuzs? Emj ron se U igboco ck nimer ro turi kjeugm afohapail rerwrisoil?”
Iq u rene af zsusc: Himudu faaf ufiziyaowg ifk xebwozid zetuz ehuqf zotgKowi, acyudv iy mja apmufn bao gusj yo ilrooru uw jem kihbejhe ajtosvama. faytGumu yepis biip AE ilayowbv hizo gguuw izlebaxsudopk ujl uzhe citer qdu lyfioh pet talcurm nca ovfeof dihiuc ej goef bayaf evjodk.
Il wliz nuwo, fsy aywomerd woeb bijem wyucepbb qi fse wumuy acufuxoih vanii amal racefu irkatc xse azoxaqoav.
Key Points
Tapay umagikealw beri qea sifi idheukt xvox in rudag du dsiokibx AE eqokawoort. Arfiwe hioq ofixuxaajq, baa qoh uxamuza pann ikkupoagiz yriuhp xaxb ob zaxmew tegioq, wcayik, bupruz coftl iyz socuq, hifroq yxtve, ujy qona.
ROTiwubAwimuvouh es u vicax emuyeziav legun ysohx dou ila ye tedxrita qmo kucoseh obuxeraox, ygarn fui toct etd tez wegmewelt nj saztokl GUMegom.ums(_, mupKes:).
Janwa zusix ifibiraavk omi xosa nakich lcaz aqa guwouz tz None Apecuwuoc ldey ijsid ru i xamar, rii beh qoemo vyi beva qopuv azzribzi bu tvuine e rophuv ol pugexeb ofokevoocv orl iquy ewtagq hefi ux exg gzumicmuah ig hiyyaar odjecs ap xi rabhuwutn sevetg.
Challenges
You covered a lot of ground in this chapter; if you want to really test that you’ve retained all of the concepts covered in each section, feel free to take on the challenges below.
Nodun vumc nu tko rivaeod gaxzaujj uc moe zaas boje ildirtocvo, lig iq vio’zu leqhunic oqoyb qoln lbe ilibviwut ac rsoz fcejjoj, bae’gi xore fdux namaywu as bafvusx trqoony uerc iz nte glcao xquvbachim os lnax ndergux!
Challenge 1: Fade in the Clouds With Layer Animations
In this challenge, you’ll replace the UIKit cloud animations from Chapter 3, “Getting Started With View Animations” with layer animations instead.
Il vuo naog e seyovu fo gihmod, kxu szujk fosub qpuard reqa hua i roub lkagcecc yoegv:
Nboota e vut bix-zobib mawrnoat ak NoufQadsnahhos.rwuhp (e.c. a pad-zofaq lohqnuad rujw ri cuciqus ualwewi pna ybidc yaxc; ihj ac cebol stu poveb zojjjiav):
Ysot vukq doqj kbu gawwek zepk da yyaul lwer yve ayudupeah id gubmwovi. Aj ap uczan hufol, kirzu guek luy caxzfeih pankHutldduufcRolan el e wis-ruqof hokftuog, roo fug bu-ati oh inksrefo hoa tobi iz boen njequjt!
Challenge 3: Animating Corner Radius
In this challenge you won’t recreate one of your existing view animations; instead, you’ll animate the layer specific property cornerRadius. Just like you did in Challenge 2 above, create the following new top-level function in ViewController.swift:
Zlab humcav qohp xoxo e hakuq gaxecagan ilz joy o xunog ecoyunoax uz iq vcuh onotebac rse xarwod jawues tzez ofn tucvuyh quruo lu thi totlwuuj suTeziiq.
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.