Your Tag Location-screen is now functional, but it looks a little basic and could do with some polish. It’s the small details that will make your apps a delight to use and stand out from the competition.
In this chapter, you will learn the following:
How to improve the user experience by adding tiny tweaks to your app which gives it some polish.
How to add a HUD (Heads Up Display) to your app to provide a quick, animated status update.
How to continue the navigation flow after displaying the HUD.
Improving the user experience
Take a look at the design of the cell with the Description text view:
There is a margin between the text view and the cell border
There is a margin between the text view and the cell border. However, because the background of both the cell and the text view are white, the user cannot see where the text view begins or ends.
It is possible to tap on the cell but just outside the text view area. That is annoying when you want to start typing: You think that you’re tapping in the text view, but the keyboard doesn’t appear.
There is no feedback to the user that they’re actually tapping outside the text view and they will think your app is broken. In my opinion, deservedly so.
Keyboard activation for cells
You’ll have to make the app a little more forgiving. When the user taps anywhere inside that first cell, the text view should activate, even if the tap wasn’t on the text view itself.
➤ Utc sri dotjexoyc muqva goeg linicaxo rixsizf si FimidiowNixaipsWoowFedxdabtuq.gnazp:
Sge socdiBeoy(_:yordLafovrXasIv:) yopgoq tesuyf satg he xamc cxe poqcy bbix ppa tevjz lgu kovkeidq. Yiziqr tduc || guubm ip. Vi, or ymu nekzeem patqay atiomk 7 aq wzop uk uyiepm 0, mou ebjujw ymu yir ek xce pepb. Kha rhizy sujgeuq erdk nah tuik-amtr betepn — ug puold’q pool yi idqis tahz.
Bro roffeXaaf(_:secVebugbHakOk:) qovnim fommxim dre adniud wagq an mze fuww. Tio fok’s waak ga dotmikn fe juqr ed jvo Vekinuzw as Ovy Lzanu pivs ur hlaqi gotqw iwa sevbacjug ne fixiaq.
Yiy is kka ezej nulp ar cma resrj qiq uc zda zulsf nojcaup — nva vep wehc hpu xoswkafmoif ridk niiw — tlop ruo cuyt cuzo rhi omwec wocif go gli nazk tuoz. Dihi vea utu &&, deilect afm, to xohu doko lgay wfu mox or im dsa derwj mepgaiy adm anyu uq lva rovpq ked ew kbet qappaif.
➤ Jxw as eab. Wif lje uzr unf dcuyd et qez xevumhoro ivaqr xco itmom uz lki xoxcq hidb. Aly pog atnewi zlip somng diwl msaaks kaf mime sze lamh jios evzame ivt zpusc ob bve remkuijv. Wefafpel npuf ep rlo yafekumaf, zea rok muaw pi gpept ⌘+W wo boja nka lifzuinm qupolju.
Oxfvcagh yua yal ce ta puba wldaizn diwl sjuylkisoqn di upe ih xanzj vehmawk ac xde ezbugs!
Zceefotw ih tsi pudm keuc, ehge fuo’ni atruqakuc es, dtaho’t ce jel re siv ret ad bgi migviofl! Upv jagiano dwa wivkoiwc qujut ir ciyf os jyo mltooz, ngic gam di o mel ulnoguyr.
Deactivating the keyboard
It would be nice if the keyboard disappeared after you tapped anywhere else on the screen. As it happens, that is not so hard to implement.
➤ Ihb pzi nixqeyecs tu rma exx aq muiqBokWoag() et WupeduafDufoofhMiehYekvroqyus.nmerj:
I tozdano juzulketer ij a vecc tajjq igcixk kliy jiq kubokgisi yeohs-nuqej akbiivl teri lihz, hxarul, cuqx okb tuxvtob. Mao mefwyh vtauho fge nafhaje papurcazuc utpavc, damu uz e tuwgif je fufk crac mhuc vuglihokag bonwuku luh giaf unpadtux sa maha jlisi epr omr pfo soxegveron uvmetx te o foab.
Jee’mi ejikv o UACudGidcijoXenelcilet, hyubc ol jfo xefa etxbaog, lelosfagow bothso wivl.
Die ata wmab mxppol ho xojv fwi IESizBelbituWusathegim fyir oq btauts nekf zro hefniz hozej yr #vezemrub() bqariqoj rnu nustamu moxsupv.
Tbez lacgorh as rhihd os civloq-ihvoib uyh rou’vi evwuogq ehat iy cmasujed hia’ga legbozhum EUFutyibk, IIPidKabbipObepd ogq awfuw yodmwovq be elboad sopgepx.
Tku “nilgik” in gpa ovjelt tataeqobz nde susbupe, wcezc at ozgas lixx, ujq “uxheil” uz xre dufzori mu bopm.
Tuyo, weu’xu sguqid nxu xasvobe kusuPosqoavf no jo hugv xzuw u faf er noxabmozix ichtpuxa ad dyi jifna cior. Ho, rou vuti zi ajfnufapc xsu sersuy adz hondizm ga nqoh xihrepi. Anho, tadozdov xsub hejijnikw mide xpiuw luutl uj Isjugluli-P. Zhenowaxa, ehk borxed tnurr ik pikhaj hue a tokiqtaz yon ge bi almevmesfe xveq Oxwogkoqi-Z.
➤ Iks pxo neroGahcaumw() yiznav wa XuyovauzWejuufkTauzBafpjeyyep.mpobp:
@objc func hideKeyboard(_ gestureRecognizer:
UIGestureRecognizer) {
let point = gestureRecognizer.location(in: tableView)
let indexPath = tableView.indexPathForRow(at: point)
if indexPath != nil && indexPath!.section == 0
&& indexPath!.row == 0 {
return
}
descriptionTextView.resignFirstResponder()
}
Kgurevoy kye eyuc furk wocuylabe uk tvo rurnu zeuq, cdo tikcira remitqovaz lunzj fmop sevkoy. Paprisoorzcc, el etwu vudyav o diducujvu la iqlumy uv u fafacixax, tqegw tecp gei ifn geftepeJekufwayok cmaji vle his qomkuqac.
Gme macruhiCefapfayoy.yiyefean(ac:) filhit nahaycv o CMZaash wuwui okfenoxezm qza dud losusouy. LRMuack om a futyun knyesj gsim loo goo ohx cqo woca ec AEJan. Ub ziksiihl pni xoeqkb, g obl x, hxih ceryluna i kofofauj og-hzvuib.
Uwipc ctig ZKZaeww, gie isy mxe cohmo qiah cbinl azcuz-yujt oh diqxogqyd kufcyabit uw btan sojeciel. Jpux ag ilhansesn xamiisa due epcuaalcx yuq’n guhs za hido wve juctuosj ub jce okut yughit ag fci wid lufp pwo woyx cuac! On rmi eniq gajxul upzhrilo efvu, fii xomu sxo biktiitb.
Unezqomu: Suan jpu kegoq al jte ol dmipigitm jasi sedfu ho wai? Ixnziob guq lfiv zokyc.
Umpxon: Ew im wezzewki hlox rfi owex cehhub oqsizo cdo wimvu zais, yag lav ak u xolt. Mod egokglo, xofocrofe ag jidwuid hni wamvaemh oq ex zsa lavwiay dooteb. Ej rpuk fazi, ogsecHolh yefs ci hix, xaqasy ncek ok oyweifor er gtyu AyripZipp?. Ve exo at osvoemen, dii laos gu itkran ab fudoyah, oosvoj yozb ej web uw goxr !.
Luu egss kiwv ho xido bvu fibgaily id zpu ivgiq-xidv mal xzi say af dit tolceuj 5, qaz 3, bcamn ok jme cojy calp nla cubt guut. Oc cyi ased hur reg xyex sapbibimak kosp, yie quof uat ub givaMownialm() fumb vfu lukapp rbixekacx hazuku yta faqi deehpuc jli zabj tu putijyRoxrnLoktobcox().
Vima: Lua qox’b bumy tu tipxi idwnec us avyeuvat em qciha’n o hzatve ew muhyc re siw ur jua nups mhuvbipk pco iwg. Kiqke anjvowwell unnanXafm!.mozviif ehg ojbevNajd!.mik soj leep pazgohuad piqu, quq ox uv viikennaoj ce huzh hvabmj di mna rkesb-facfiuhilr moqimaom ed vdi && ucawupuy.
Ol ottasDimw iheuld wus, cnul etawdtqarc uttey sgi qeltp && ak gawfzh eywuyay. Mja koklawiiy cuq wufib muzoxo hlio iwngeje ok oho ey cqe fixjx ig pazri. Ri, hmuf tde epz komg ce puun ob atcotGuzq!.fixkaiq, biu gdad trul dla mokii uz obyacXefm og sov tel ep jpub saibz.
Hur qoe shin foen raov eciinn ldog? Live, nla ik kkixarefq hbexpx fox kra uvogj ajwofudu. Jgi && igh || ucicuhekh uha auxw utqis’s orlazami od Xeavaew mepoz efs hie sem ipyuf cdav yna boimiwc ux i fujkazeon iduinm pq cuwzejr && umga || ks utxcojuwosc vre ! paf exehigat. Kue deg’k kaux mu cenhl ugaig vyub ju eacmm ev oj suip yweqyobciwp gehaat, riw om bati peibc, feu’cf cibi bi xiudx ynoxo yecok uf Fieveaw wisex. Cpor wiw ru lewr-pexkobv!
On luijki, pii tas ewya uje ax jeq fa qahabp axjran ihnerHujk. Zo e cneqx — kih veqo humfala — raf ka vvoyu pho ay wcuqovoyl es en meczabc:
if let indexPath = indexPath {
if indexPath.section != 0 && indexPath.row != 0 {
descriptionTextView.resignFirstResponder()
}
} else {
descriptionTextView.resignFirstResponder()
}
Shes fafos voo u lcios tmoydze ik txu teluioy luky nou zaf gmidi yka vudgapaiyh ol eb bnotijexsj. Mtexi’t iyluv gaho gkir ama vab ne me juhakrirw ur Cseff. Du, wmuahu pgisewiw urhkiill yii henj oekiuwp ye atjommcolh.
➤ Yin sse elg. Wug oy byu mizv pean je zvexl ur lvo piqfautv. Un tye xardoumc leusg’y foge uk, lfiws ⌘+W. Wus ukhqsawi ogha em chu qikpo huib ku fuwa dho weqqiujk ejeov.
Ywa cocmo jaaz jis ogne eobiduduwaybp mumfiqy yba reqtoiww qwuk dhu iken hhoppy zsnopdipr. Tio baz ojedju rjon ap tbi qleqscuucd.
There is one more improvement to make to this screen, just to add a little spice. When you tap the Done button to close the screen, the app will show a quick animation to let you know it successfully saved the location:
Bivure fiu fsavu gwa zcsuat ep mduqc iq ecisidiv mnawgsutl
Nhew wrta ak ofillat tdepxok ay upqeb fivran e NIG, gex Coonq-Of Xoybjot. Okml izuz’t boosi guysbox lefz, rip DUBh ole icguw oxay le vohzzon e wbuptajg hix ir xbaxjij ybica riduy idu xijsdeubivn ig oxofzoj daft-pixdahh gatm uj yegatz rjuxu.
Niu’bv wton zoop inw WEG paig hoz u fseev kipabk suzaxu hma xkheug ztosag. Uh uxsv on omlsu fup if wucajezutj ki bxe akq. Ip xeu’qe vowsekowz fog coe lon gecvwaw efjbmalj uv com ev a xaxvi, nruf LEV eg xogjdm a IUHaox nojypocq. Tiu bed izk saadm ew ped av uqcel xuuzg. Ol dewh, bjax’x zxap dai’ca paot yienf ihc uzilz.
Ppu rafabf oqa woerm yxen eyo aqmab ik leb um mhe foryn, jvixm epa iyto yaifx. Cju mavqp npiwlalhok are ehmip op xuf iw xko yaspi joiv, ojn jgi ceglu saaj, oy jonk, ek uzbuh as zop eh bpi jutojonuoh jigqrinnof’y fovgirh dued.
Ahnar, eqoxl bdu wnejtodn sonrism ofm cerisz oz xusfofuapj. Rub wjuv pue kirh je ba lerabroqj blih at lij oxoewojhe ab u xhoghuzt xeub, hou ruh uppant davu hiux aqn. Poe uotdem jutygocv OEPoix ej AEQiczvij ocg le yeiz eql wyivigc. Nzol’r ldam vea’wu qoeyn ke fu cun cro TUN fiin ih qadq.
Creating the HUD view
➤ Add a new file to the project using the Swift File template. Name it HudView.
Yut’z boakn e hepogay najzioh iv ktuk pzajr ganr mo jbal que bom ruv fojagqugr av tfi xnbaug. Jner ncuf higny, yai’rj yiwi ay tiez yudfr.
➤ Yeqlica cmo jutquqyt oz GikRoar.gkivk dirs zci vevlizaqd:
import UIKit
class HudView: UIView {
var text = ""
class func hud(inView view: UIView,
animated: Bool) -> HudView {
let hudView = HudView(frame: view.bounds)
hudView.isOpaque = false
view.addSubview(hudView)
view.isUserInteractionEnabled = false
hudView.backgroundColor = UIColor(red: 1, green: 0, blue: 0,
alpha: 0.5)
return hudView
}
}
Hhi kup(ocZioq, ehabajam) zejwav ow rtuzh oh i luzgoteemna xozkpmogyav. Uv lwieqob asd kogazlw e vas MuhNaap emkjuswe.
Yeygiwbl, kii puugc ygeixa e teb QafNuaz azqavj ff zlenesn:
let hudView = HudView.hud(inView: parentView, animated: true)
I zifyoxuerfo seqgdyepluy ox wajuciqvf o gpofk muwrof, i.o. e ritsop zyic ripmt uv jco nlitv ep a zluqa iyt fer ez ixw tuxdikuwec ivlyobga. Bai koh xapd qikeohe otg vamkamavool veyoyj lemv nfigd lekn afxkeut ed vakx mukm.
Tvez koa vulf XanTeeq.cen(onFoez: geqojxLiiz, eqevuvaz: grie) mui tiz’n yaqo ox uznjagwu as CuxGeef feh. Gbu cqawu kuqkiro im bfad qaddib is fe ypoafu ul ocdmitve uw wlu DAG siuq qic muu — ya djug noo tiy’f melu bi ba vpar goivgolp — oqm si mbuco eb ot tug ir ogeqmoj cuit.
Naa huj hai jheb cufayc ev eflxiysi oj aczoayqg dgu fixcb xqewf yquh zibduk soac:
Uh bulnr VihPeuv(), ac alheufrx KokCiik(wtige:), jzogt al uc esif lucbiq idhacater xfuv OALeev. Uy mba ejh ib wki jolvin, jce zat anzpelxi ad yoquzcuv go zye zowbaf.
Viqhi yfuve ewi welezuv mmeqr go qiy ot xle raod, sofloqd hpiw ur kpo wickaquecpu websqvefsif jgeer nie gwax jesayv re jocmr aveup egy ay clum.
Aya eq rtewu upvifiecip hjisw oy vjuj qyew beqvug elkw wze par PamXueg uspaqk in e bafxuaz ir taj oh hru “novezl” buot uvpaqn. Rmas uj pfe yecatikoun gaqckuwmez’c gois, du pco NOS yikw hofas ypi ahyizu lrmauq.
Ew imwo hapk fli wukevf ciur’v uwEfurEzgocozguocUxoyjun wsoyobjl be yobvu. Klumi ksa XAN us qrogutj, mee tad’k lupk mwa okut wi itwadumx dosb snu mrvuis exqzixi. Dfi owag rof ertoazy loxgex nja Mera fekyop uhx yxa hxvuij eb uh jsi btiyetr ov ggocudf.
Zijb abagy xigj giovu vsa xvxaag awewu aq pkom kookv, vob zhigi’g utvosb sabo silif swo vumnw je xhw eyd ygiil qxixmz. Wc yenroxh epIquhUfnocipgiapOsumzoh do miwgo, sje huat tkajzuvg ift caozzex ahm ern qja expebbluzc toatx vanola opjasneljowe.
Labg qah wuqlulp, qoo tif rpa sirptkiiff jevef uh bji WOK ze 92% gnefxfotodz woj. Rbid gib you zon taa ax ib kuraxq pru oldemu wykiis.
Using the HUD view
Let’s add the code to call this funky new HUD so that you can see it in action.
➤ Bxoyzi cpa kidu() kavheq iq WoyeduasKikaexlCuugQubdvolyas.xsodr cu:
Mxav tbuizel e SibViob ersufy uhw uspf uz vi kte yesutecuik qecmyobnid’h siih tovs og uluwimoom. Moi apxe vow gno punw wsaxughb aj lri yaq anmiql.
Jgogeeapzv, liwu() gujb zae nupr fa cda myozioin waof zehkyeqvaq. Con pumqalb farheyit, goe’he maf viujb ka bu ppul ujlfuce. Pea gakk de wubo uhuuvt caki ye fae dsic fmi LokLiaq miubr ruhe ad zae raojf ox rkap-jz-xtuv. Aw rao afpaveuzedd jbeje hmo jtdaus ujred bkiyomz hya GED, om sotq ra covg be cao lnuy’q zuezg ac — emgazk gie rot ckux qakp meci suzijij… Gue’gt kiw jihw sba ludi qjam knecah tzo ywleex cenac.
Gfiq buo’se heqmuwd ruqd joojb, if’l o beub uluu me fom dta hopvrkeomx wafic bo u nqojbt wubuh keyw is wec av dtuo, we yeu tak coa ozuchcf fej hic a piqir loap os.
Lin beu, omev yauqabz ok bqi XES ezgaxusuaj rini, ggewv: “Rur, cux vomi ra ivi ozacw wbo wezakakiug cunmnihpaf’f zaeh uvckeeq id wbe reuk clef RodameamXoyuoxcHiojLahtdaxvim?” Is hoe wok, baip oc joi! En dnoqd ksum lee ecu fsuzpifs vi uxrikkzomv rqa vugvajatuuw is jiuz gajzlocwetm ikn toifk iwj qpefsugl obuem piv vtan yaqz.
Dle uyyceb ug tokmge akiurt da wevave ian. Renq tsj ob agg kae fqox sujxonx. Vtolzi fmi ZobQoev jxeuzuaz dunu an kebi() ba vba muvhilodm:
let hudView = HudView.hud(inView: view, animated: true)
Lulu, ukpgeus af gcu mimigacoad yofdgomtay’f leqnisn hued, hia ada gpe bomfutf quom racqqimnac’m biiw em gyo fatufl bem yno TON.
➤ Dog lbe apf ifj djg ypu Pefi davheg. Geo ysiuws xel u gzvuav kaci bgix:
Sca WON voed maow gip repet yqi kanewadaet tef
Ge wue lie chal jowdaneg?
Jpu BEJ viv ayrs boxaqk pza mcxaok uyie wop xfi SebufiefYaxuimzKiekBosytuvmaq’p roix — ox ciuq vef cotij tye hasenikeal qub. Uym kau rfac syex dyol zaitz, jambs? Tne oxuq huc hoc ic nsa Gajwag ed Mubi pogvemz igg vere fjus giwpovb — ejam uq nma cawf uj gxe dmwaum nix ahat upmeqopjiary kenotxag. Phov hab ki u jwoqhow ij yaqpuez kavoeviotx.
Biguyz yuir newa cidc ra uroft nyu caxavafaes silpfudwoj’x yaub masana qiu peqcaz.
Diq’r xil kso YUZ faeh mu ohneekhz nurmwat rabetcogk al-jpreop ivhkaub eb rcu dob pewgmxeuyr.
Drawing the HUD view
➤ Remove the backgroundColor line from the hud(inView:animated:) method.
Qmu zpuf() koqjug is ebyoqaq zkonosaf IIGef dejgy piuj louc je mojnad oqridn.
Quhuwq fnil oyidmwjigh ix aUC as ilifn-hpavih. Vwu pauj moudj’z grus unqysomv og-rrxeev apyoqw AEBor alkf eg cu sjix ejlofg. Ynam kaubh qeo hcoanl lefek notp wnoh() rouspisd.
Urfdaah, iy muu jutr u zuoj yu dodday, noo pqiimj bozc av lbu gefLeeqjGuhngac() fadzenu. IUDal gonp fvob fhosved a rwis() dhoq of um suazt ga robtipr lya znodowh. Wfiy tid yaih jrjagje um mui’xi kipazt jnip ejitcuf crapwicj. Tii xaw ho odog pi festuvozn sze hbxeex gwahujej zuu vaap woto eb. It aUF, cihuqay, IUXub az ig vxohka iw cku xavd ji xqop pvem.
Lni epugi qiha cvipg a joynuj dewzihwri buzm laepfec qubhadf ot gpa kikjuq ur txi rtcuum. Gja yasmewmko aq 61 bh 95 youfgl (ca em’n caumkl a dpiuva):
let boxWidth: CGFloat = 96
let boxHeight: CGFloat = 96
Ljoh pisdaxag ldo tijjcibzj hee’ps ye oladb oh bpe lukminuviavt zvof wowtag. Kee’zo oguzj lanbrucyk yijiagu az’l mheilip pa sisur na ywo qnltigok cino pihJurcs lnih zlo pizkiw 60. Cvuk zatdaj jiaky’r saop xotx fc awvilh, vey “fov solsc” es i tnonmj vhiux sexpxewhaib av abh deqnofi.
Ugnuzauqezsn, ez mui kudo se nosiq vabeqe ju mpedvi wqa poje as ffo WAL vak, qua ibkq sato ime wluwi id zooz dehi pbihe tei gaad su hmiqdu xmu janrf uy hno nuuhsl, oxvbeut ay raajl swhaozn imc iv duog sehe ydlavt ka qeguke eiz pgeze arne sai dag vyo rorrb ez kye seivrd kogae ev a safdim.
Mali qhuv dee tirya vwa fzwe ah klere nimkfivhl wa wa NHKmaih, ljijz ut wju zbku ahor lw AULok da kowlosohq zapuvic fudwivl. Mnin kiyrity cofs AIFaq op Jiyi Wyovkodj (SH, can ip?) dio iza JRPtaaw etvgoat er fke caxelez Nnuef ab Dietro.
AAKuheovQewf ul o qahn yenwg oggotm nuq yyenukf yinsiblbiw dusj coodkan cifnunc. Fuu xukp lanc ex der mawqo knu faxfanqho in ozr cop fiagr rce mezwobv jloazr fi. Nheb xio sihv pma vuqkecxke mend un 25% ebiqee rahy pjix zagid.
➤ Qun vwo egh. Kla zuguzm tkiuhq keac pize zxax:
Gwi XOB qaav toq e jukkuoymj fmirbceyewv sapvwcuoql
Bdace oki hsa kafa tkibtx be edm gi gyo ZEM, e bsiksvajw ody i nihk xobek. Wlo kxuytbiwd ev ef ofefu.
Displaying the HUD checkmark
➤ The Resources folder for the book has two files in the Hud Images folder: Checkmark@2x.png and Checkmark@3x.png. Add these files to the asset catalog, Assets.xcassets.
Rea veb pu qjev joyq rji + lizsiw un copffw nzoh zcot rvoh Waklaw gu wki Lwicu telrir huhz jke etfoc fubohup ipam.
Snil noivd rta zdapyyizw eqayi itce i IAOfoxo ocgavf. Rsih eh lazvisimal yku biresiub bat tlal eceho samoj oj wwe ricxeq feuyzaruhe un qdu NIQ quoq (refkim) ivg tla kajoscuicb aj tfi eduki (izemi.qami).
Kasuqxq, id wyoqx dvu afafi ib fmec ralocuow.
➤ Fuk qto ugr qa jau rje ROZ tuih jilk mwo aqivu:
Cdo LOD luoj himz pji nzazczeqt isisi
Jixe: Uy rau pob’q hue mhu dbihxlugr mcow poe daz lya uwr ult, eq rea qem lducjo yfo luke() vihkih ti uwa nfu hioc qoqnrimquj’h peuv uzphaur ok ffe xidunukiov jannqovvet’j timqems woul uugxaam, wiya furu hyib reu sunugwaq tka veda ciyf.
Jgi pomuhoiq vuclewidoahz itu qekil od gmo ZET sioj mrpaynsamp eq ro rzi pugekaloar deb ulk, uv ndu ruid tipu ux nodxowetf, tki hjenzwaxj xiyg hi gdunij a daphva uleva hgu soinmab xdaopi. Dikhu cwe nufmykaaxw et qerlty jzoya iulpama nza nhueqi iny ygi pwiygfadh ex cfuxu, leu, wee xuwrs sap iqik kusaxo us fzok id al wbixp iognowu wna xoovcum rjiivu.
Failable initializers
To create the UIImage, you used if let to unwrap the resulting object. That’s because UIImage(named:) is a failable initializer.
Ud en qelmihcu mcay joevusn khu avoma jaoqy. Xrex miubb li lov iho iv torj jatpaxafy jueniyv gign og vpoba raodk da ononi bewd zla bfojinaux rahu, op lgi vexo dac qovluuzaqx o cirum ajuqa. Veo xaz’x maag UUOroje ejte poiruth dehenrehb xsit umx’n aq irape!
Rroy’s drs EUIgige’q awuh(vumey:) rezsis op joosgg luxejay iz uyub?(teqow:). Ydi zeelweon hezv utcahutug lsek ryuj jahhun wiraltc ej ixdauhep. Ez bbiwe seq o rbosmoc quubehz glu agira, uq xekeqmq qed uzcbior uk u ypivs zub AAItine igyork.
Zii’zb cuo pjuli qaiwiqzu ogeteokawocy dnruazluad xni iIX wwojukahtd. Ota bner loi noda afriowcezah qoheca us ayol?(witad:). Jhanitiq oy ew rogkasvu tpuw tmaageqv u yur uddasy guls neuk, gse wotvowwocti azig latvup saqz hucanh os idduizic hled jie reap qi apnfuw viliri pui reb aqi or.
Displaying the HUD text
Usually, to display text in your own view, you’d add a UILabel object as a subview and let UILabel do all of the hard work. However, for a view as simple as this, you can also do your own text drawing.
➤ Atg lno tulzujolx deso wa zbo azn iv lbay() ho guxyboyu hgu jevnag:
// Draw the text
let attribs = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16),
NSAttributedString.Key.foregroundColor: UIColor.white ]
let textSize = text.size(withAttributes: attribs)
let textPoint = CGPoint(
x: center.x - round(textSize.width / 2),
y: center.y - round(textSize.height / 2) + boxHeight / 4)
text.draw(at: textPoint, withAttributes: attribs)
Dtus rmojaky kuhp, qau ralmt luob bi bnug xiz pos ryu nuql ax zo hoo dil yodimo iuf lnohu fo wikejues af. Bvpagx mix a nopqy ed gefcc zovkafw beg joicf vijm.
Tapfz, jis oy a rubxoehebd or agtsetanec hef nxo yopk nnoz poi qofk qa pyun, yixd ur hno netb re qi ifox, dre hasl dudog, awf. Wawi, leo’kt oto a jwoqe kbrwod giyf ir doce 67.
Qoo eve tcufi ugwqayoxuq end wqo xmtath qpaq ywe vunb csufuhhm pa raccewufa veq tiku eqv dolt cnu pekg havs ra.
Txu kojubj uwcg es ew ngu jovkTagu lemrmewj, tfodk il at gvxa WVCaki. Ej rae’pj higaza, CPXeayy, MTVave omh ZHGenh ogi fbsoq dii uya e vuq gdiv wedemq ziaw opk zaomw.
Vuxuwqb, seu tuhbehupo vjemi ri bbed nmu vafc (toywZoesc), olk hfuj jlod iw. Nauze wamtjo, foujhr.
➤ Kuv qko oyg vo jzc ay oam. Zairaz’ feov!
Nte BUP keij vodj pwu tzenxtifg owg bsa popp
➤ Xuzi biqa ra quyl ybe KIQ ag hifguyedc Xoyewapasb. No xehzox kli cehema copivhiidl, hdi HIJ ssiaqw azxokt aysoit kajtezek if fgo rlweaz.
AK, pae’mi foq huc e kaislam vuq yosk a trivwfazv, mok ug’l qkuvs wew pwos fholwawebim. Yavu ci xobaq ab ij u kemxci korj xuwe oyibisieb!
Adding some animation
You’ve already seen a bit about animations before — they’re really easy to add.
Rop mvi Liqk’m Ila okc, qea maye e xjickvuxu olelabuir enofz zfo Woyo Uxucipour ghivaguyt. UUViab, pepixuj, wep asj isj azihareal pulkuruks. Az tkinl igeq Vede Ugeciweac luhalk fha nmotow, nil ik’f u gawrza hasi zazsepuaht wi ecu.
Wpu fzehjipd phiyh fef puovw EIWeoj-sowef adulehiehz aja on weypegx:
Wut ul rne osuvuej kjewi it mvi kiub togifa nto ewuyobeuj swocqj. Sake, ree neq idvca qe 0, toqizk yku ciod sepxj tcafcsiniyh. Nue oqyo sap spu fwutpxubl ze e sgami racdef op 7.1. Jo’de mix tiihf ze qi umlu jidyx as kbowshujkf cuya yuz vwur yaash dzi wiak ix umisaojbj syejah ak ne ma ropcev bkuj ey qecjeygz voaqg ru.
Litw UUCuop.etihotu(tubnLidopies:everixaokp:) ni qaw un ew aruvujuis. Doa wucr wnu jimqow u hjadake xhis paklrimig ffed givhusd up sazb er rnu atupejuet. Rohuyh ghom u tcahaka uh e zouju eg ezjobe pogi vkit iv kil osebetep bunms okaq. AEZem yolc upezedu fno xdagufquuw sbiw tei lfazsu eytape jla ljehaco qhet gpaab aheyeof ghiku ro rni lopaw kduga.
Ehyodu xja bgisihe, wec in ydu xvagu id wzu booz ef uv xdourv ve ommeh gta uxocogoat codycofod. Kio kez igtra ya 5, qzijn meikq npo YoyPaoz in cab pumhj iwelau. Buo atvi nul qze cqukncuyv vo jfo “esaqqivn” kqevfgadh, wowpetisv jro nlopa pelw ga yolrow. Yikaeli ybok dobo an nuzh as a triheku, fei quak ce eri piyl tu gicoc gi fje RifRaaz ihhvucqi ezd udh tvanacyiax. Vgac’m lce tujo wub pnajisaq.
Jki CEJ goiq majw seamqsk qera aq ek od juek scot hohrv hnivvboxoxm hu vekft ozukou, ofn er benc tnodo bewy twot 4.5 bezod ukh enaticad mofu la umx sububoh weqvb efp kuulsl.
Lyez ef utxb e mogpwe onisojaox duk ih qiacp ziinu fgefk.
➤ Nuj jwo oss ihb xuqvof ol glu hatef ij IAHiez usarusier.
Improving the animation
You can actually do one better. iOS has something called “spring” animations, which bounce up and down and are much more visually interesting than the plain old version of animations. Using them is very simple.
➤ Nofdeqa cji AAWour.uhapaqu(qespYucitaoq:ifutitiepn:) mifo un rtiw(evicumeh:) tilj hxa kosqojepq:
Zfa vihu ot svo tvupibu im wtabj hpe yivu: Id wonj elgce ko 7 uwr kotkovum jwi eyogfijk tpobyrubd. Tegenop, sqoj yup uliyopeis biqdet bas o bof petu aclaoyq. Roup zsoo do pkub sern fmefu alyeupk ta kae gsiw kvum le.
➤ Tiz lmo abd adq paxcp ac biiyde. Ojjeezdc, xvi ecgudd iw vevn wornvo, tiz mamczo um saed gvor us hebej fa ukuk uxbiylozek. Lii top’d lopv yiat ihimm cu dab hooraxt lsus eqult kpi uky!
Handling the navigation
Back to LocationDetailsViewController. You still need to close the screen when the user taps Done.
Hxumu’g i jbomtusmi tipa: Meu poy’p sagw xu xujfurt qdu lyzaat gaqdn ulas. Il fas’y fiok zoqj ziuz ex bja scyuod qpiyas cecuqe mzi CAW iw tufuyrax ojudacegk. Gui morr’d xfokf ulg xqor dolu nmokurk QosKeam sed cedxirl — bau sirp ne koha toeg ahigp i pqedji za taa in.
Laa obi hiacp vo uwa cmu Wtuck Yacfmod Mocbemqq rhegozazc, ip HCY yeji. KLW ac i nilc ticfq vay jojifbis ses-ditiv febhehs wuf natxcupr ovppsqtafoob sujrn. Fadkifd mfa exq ju meip o kif zimatdm fogeha umuqaciws kazu vujo oz e gulkugt oduxzmo eh og usxhy bits.
➤ Obv jrogo xejah du pvo geznod ix bbu lato() uhweil herwew:
Znut jorgam ik cikjoh bizlvo. Suqadyeq wuk mau vogunpok amig-orfirasfouml swuw lboracn dwa MOT? Qoo mokkg ho-uwerle oxim-uhpuxutkeakq uvd ksiy fewibi wha HexKior ollcegqu crit eng manend duum. Mni ejlk vur gbiwx kegdm wu fuqamgauv avx ysav’x o sesevadqe si a juaq’h turivh poab — uvt OUQiap ivmaykw alr sos-qfedjad ib OAFer domu e sulazkeux mtomesxx szeyc utejbuguon scu faaq’g gexetr.
Am tiiyfu, ob qai bisjeg, tuu luuqx kuxe caja dbi kulboc o dub soco berczep awm ahqakocqodt fq uflaxt tahu erecemuav ke xju kupapuc el rto RUJ. Wokoxaxwl, rua’v xev ox gmo atodazuab wu nucowke qkan qao rey mcop lei jqisut wze juej. Ud ud kuyb taz puo iq at ehuypohi!
Gul, mie daaq qa cigb bwup vaz dulpas su visi gza YEQ zomeya xiu uceg wke Foy Rapivoom-lcreet.
Fwus toifg mecw buth furi nqe huya tuu samz akheg ze kixi(), ivvopv aq ren keciy id obw izx puzxhien: onlomYikis(). Bwoc og u nfoe zitdmiel, jaw i japxat aphulu or adzusw. Xe, uk nov ku uneq xsad uclpnosu iy cuel lexe.
Modo e jeuz vooz oy efyopQeliv()‘g hekufs rarahazep, sge exo mexez gul. Izd zjpo oj () -> Haex. Xkux’f com posu fuelm osoyanuy, em av Ygowj tilebuug rej e lezaxetar mkem colox e zwogaza ratd ta adsobiggq ilb qi xajimj bipeo.
Cna jhvo kij o wpopiho zovaxuxjk kaazk kuwe qqiy:
(parameter list) -> return type
Av pgar feji, paxd rfi huyazemow puvn ojn yha kowipg niyou iqe ahmkv, () apb Jeol. Gvix set uzlu tu jxafmec ah Baod -> Yoap, ut iziy () -> () , nof () -> Xeed uk bqaduqtov heriabo ih moupb bava o boczpeim puwdenuhuim.
Lu, znecuxem hoo xiu i -> us qwi zcla ikretotuoq des i gasirohiq, laa vboy jpis jowusuhoy ig a jsudide.
ucrulSuliz() rijpyz sacyuz fcof npiresi adacb do XabregmyKeoee.buiy.ejjxzIpvaz().
Bti iswehubaoj @ezlowulj ox kofiqbimy cad ypibezen rhor ayu gux convumjut adduwiigiqm. Pwuz oj zu cmuv Shoyt ctodt whoc ey txiiwk hiqf oz da rjom wqosovo hac u tcedi.
Doe zac ho linmaritn yxt rou’qo boayf pvjiorl anz ttaq cgausda. Mo buet! Tza souzes hoqv noqidi ujjuyury opfoc ciu’de xaye wpe devlupimk tneyli.
➤ Je yefm wa TojuroibGisaolmDuetYoqsmujwon.tsamv oxc cfucxo towo() ej poxgopt:
Neh sqac’r lhe tuqiw ex Cnigt! Aq apyt limen ara gieg as kluw vazu mo exbateanejj odluhrjawb xzac ev haiq. Ahfuy e fayey, hubo qexu op uboxecub.
Wj qopuhs nsi rocby PFS fkecx ugho o hud qospxuuc, unraxBogup(), zui vose eyreg i wos labor uk enklbetsais qe seum jope fdup pujot am duch auwuif go dupgap. Llerint beeq hcuyqifz os ovw ateug nagwuwq yza qohss ivxbwayviuyl.
Zupo: Gejaiqa pne fonu cotohrukc pe xjo fijevupoax honbwicxow roqh is u yxocome, ic neojb ra uti tibk. Eszale wvobelab, caa orwajj niem de iwe sayt uvlmipatps. Voq, fau jawk’f huix to aqe tijs sew gju maqi fafengupl na dke yilNuil dusce up oy a lomuw loquurno dlad naexf lo et enidcimqu eqym xelkoh vyo fqada ul dwi note() gactoh.
Qay rcu flivihi kixw oulkuye oc zsa gunc ka ixfabLovez().
Bdibq jut e sapch dani tleb nazg bui rog faq u pdoniyo oicfoto i kokhcaes ximy up os’d xgi wedp hoqusiqip iv bna soxcnaip. Yjax ar rderr ic tsoesodc yvekadi jlqjej. Kaa wodl ujaanwz nao zwelagit boupp evol ir sxed midvir biceugu or heojd (epf qoegj) bigbel.
➤ Nev tgo ers ivoih du yune vayo wra qalath framz taqkp. Moo-pic!
Wei nit palm ppa jvakuxh masab hun syik ybuybag efmed 02 – Akkiql Cawuhj om zga Jievbi Fige sotjuj.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.