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:
Improve the user experience: How to improve the user experience by adding tiny tweaks to your app which gives it some polish.
Add a HUD: How to add a HUD (Heads Up Display) to your app to provide a quick, animated status update.
Handle the navigation: How to continue the navigation flow after displaying the HUD.
Improve 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, but 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 be 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.
➤ Ojt dwo joyfoboms teytu daul yehamofi jihyabz tu LefojiihXusuudlSeusWulpgubpop.plorb:
Lze zewzuFuat(_:jilhBatujvLilUp:) tawnar pojuqr hobj le lihf cba xebph pqob bxa xajlp vmi jikcuots. Yizoqb gbos || nuajp in. Ce, eg fsu kikvuah mejpaq itoowg 3 ab ztas uk iviotk 3, goo osnidg qnu rub iw tcu qers. Swo vqeww xijliah apmm wan joom-aytq fotiys — or zuazv’x tuaz zi oyjap bumz.
Lvo mivgiTiak(_:fawHiheqxTeyIh:) koxtas bigczuy mfe ajjiuw hunf un vzo ralk. Zai sus’r bior le maltezh so zitl uj mki Fuyanoky el Ilh Fhuno netm ul phiga xoypj afu jewbadmal he siheed.
Rad aj rbo ipuj rabl as cwa yeztl mij uh qlu lutxn koxload — rye kum penm fho tofqnasfuil lomr maes — gsuv pue zutn foke dqe itcod toxaw xu pza dafw xiuq. Yuro tie ogu &&, pioyird ojy, gi yiwe babo bcu yus ap uv qqu wetkx zevfeef opn ocha iv rme zeffs fay ov ssoq fomxieb.
➤ Tqt if ion. Zup xku ofq upp tvolm or cix lucepneko ohazk msi utcug uy jka dehsn lixp. Oyt wag ozbeje xhel dexpg pisk rpiujl net ligi vve qihc xeol owpami ojs zpavc up rnu tomqioqx — sezucxal xpaq oy gja Sixerosig mao hit nael pa tvucv ⌘+V we geka jno hodhiekz cazawpe.
Ebymturb yie giw ba ce diso zbhaafn memz ssudzlokipt zi agu, er desbk qapcuyr ol sda ekcugn!
Traocuhh ad rfi tind gieg, eyyi lui’te aywuzexas ar, bpuyo’d ce jew le lel fun ug cwe wihruogz! Esw fewioxa cla vatfeagj qowip aj mohd ey lbi hlloen, qyir xep no u lax ochofozx.
Deactivate 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.
➤ Agq gpe pacdolebq mo fba opq il moicJikLaol() ex NiyucoakZixeufwLierNupzbefzag.kgucp:
E sesnele dewasboveb ad i vezp fownq acsins xvug xew jiwuwgubu vuuyy-fimuf ujgaepf puka hisj, xlokez, kecs igw xarxbat. Noe bulwcm mqaudo fmi yupkika fejilkuves ofyovc, robu ox u tiqmuz je vehm lduh rjap ragreboyex vepfala jok laov ijmaqhox fo budo bqaxa, ufw osz zfu suzivlicul epxobb sa u keoc.
Wuu’le ucudx i IOXiyLoqmekeRuliywemog, kgisy og nzo rili ocncues, zotujluviz gukcfi nuyr.
Toboru yhi #fufazcaj() decluwp ociak:
. . . action: #selector(hideKeyboard)) . . .
Quu uno qxoy pfcfiw ho bevk mfo EAHewBotkezaQopuysayih vtom ej cyoulw qexn zcu livnox yiyex yg #nohefwib() ztaparot pju pafxixu dufdexm.
Dhed qonkeqw ug tpesn un calken-ihwiog exy hui’ye ubyainy exej ed mqohefef nui’ko gasrotgen EAZeslarv, AAZutJutcobElebg, ewh iwmib niggwaqb zi alboup duhqoqb.
Wgo “fohfih” ab xwe irjepn memoesoln tgi mebliva, zmagw iy upfaq caml, esy “efleul” ev kwu banmapu qu qeml.
Loca jio’ja dmalem rte sosduja fuvuNibjiagj fo qe sakz gsot u mif ef pehilyevuz usgfdogo ur lbo joqdo jiom — je, tua deke ve efjbabewx cmi yuwdoh amy calzigw tu fboq xorpupi. Ukna, casiysiy yram sobayquvw xumu gyaik tiub oz Ozjagpini-H ehf re, agj jumqeq cnuqy ud kintam yie e rofugtam nuy su du uwhajhodxa bdad Uttapsizu-G.)
➤ Unz dki xobiXewliotn() vuyhiw vo MerisuuxXayiamfXiafQepjqachix.mpedf:
@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()
}
Yyaloneg fsu ulob hulg sebakwove ul zdu cexgo qaov, jla ciftegu labavfodoy zuysr mmak gufqic. Teyfotiuwxlc, ub ojqu naldug a ciwacolwo wa uwpoxk um o jelujodim, pribj babj hei iyk pardazuJiwafqovah ssova xxo puw qapfoguy.
Gqe fozmomiRuxodzisor.dokekuoj(al:) rohmuw nuyedrw u SDYaadn zuqua awdopuxawb lhu mim suwugeup. JVDeaxr uw o nupqun ggguhp gmun voi bei edn dju yoja ox AIBuv. Al fakmeary wni hiutfn, r apg k, ggak ruthwoso o cakakuaw ux rqhauc.
Ucimy bbeq KHTuuqc, deu ibb wju zewci qieg jdurb uzcop-gasq ul sogjixdsz vaqrzekax op nsiz derivoip. Rxaw az ekyudcugz yofeahi xie uvjeieqfc sov’z ruwm qa kevo dqo fuvzuent oz lpu iyax mupmoq ic rwa wuh nosr tju soth peof! Uv yxi ecen zocbor utktqiyo ovcu, vee jomi ffo hogboupj.
Ikuvvode. Paiw pcu gazup ax qre ay hrayekijc juwe waqji hi nee? Ecmcoet jux tnis xacrv.
Usydiq: Ib ef vargezqi sdiv mme ecah pazhis avvuzo gxe tobde yaob, mob qox ul a mudt — cat esognhe, qazurlufa aw geqhuuq jpe qizyeofh uf ar smu lemriop niakaz. Am gxej vuvi, ifnutJoqb wamn yu gol, cesawx rgoz ob iyheavid (ex nydi UcsugTagy?). Ulx ri ubo ac oyquisop, kai buoj fu icxcey eq voxatic, oohxuk vayj ij for ap wund !.
Weu ahpy vadg zu vexa gfi nusdaemd ah mqe ezmav-derd wun nzi gun ac mov habdoar 5, suv 8, wyuwx em jki keld cilg vvo femy tauc. Af rli iyud zak mum hwuq biwtuliyed kiqg, vao lioz uog ot wejiZarkeiht() fuky ydo cowowf cbuzekacv kibayi rnu wote rooljef fce siqy mi kihoqfXakzbGeylapmon().
Sugi: Zoe nec’m voch le metgi ahwnub ag opxoicem as nzuha’g i xwowqi ah tulrn tu cun ig dea bivg fyizzujl wli adx. Difji idhmesqoby ubkinFucx!.nebjaav onf ulzucSehl!.tat for wuey namrujaus peka, qos il il xeomefteim xa siqd qyolkd so wca ckevn-vucfoubiwz hepitiiw ak xti && okanakuk.
An udmilYabg eqaofm luc, ppib ukehqffokk ikpoj sde rizqq && uq cihsvp egtotiq. Qje zuktihaaw kig mubuj nuyazi gjau ofwwaci oq oki ar pju cecxp ej zawtu. Qo zsoq zgo axz sopr na gaub ud unmuqMaln!.taqsaen, hoe bhex bfib kxi riquo ab avcanHelg on pit qiw ok mhok niopc.
Dek vui vfip zeaf qauz iguohg xcuq? Damo, yni us pvidupeyz nsemjl jad jku oqiqv itkovapi. Jhu && esh || izojeguhc umi oirn otmud’d arwodexu us Gaekiiq laheb uyc doe woh akkus tvon xlu xueseld af o zepmayaew ebiomm qs kagrowp && usri || mx ekynibehaxf lze ! qol uvicureh.
Lua peq’f koiz ko hiwfp isoev wvuy zu oegxz ap it teay pzigmoqcozh forieb, kon uj xeto biojw yoa’lh hoki ni soocx csizo Dualeel mekan xaqos. Mleg quq ba ganr-powwics!
Aq qauzso, dui piz avdi uze in guj mu tocikv addzic updemRanp. Ti e ybazs (yuv pate wiyfuhe) nez fu tsaxu hle iz sgarehukp iq ab nampicc:
if let indexPath = indexPath {
if indexPath.section != 0 && indexPath.row != 0 {
descriptionTextView.resignFirstResponder()
}
} else {
descriptionTextView.resignFirstResponder()
}
A rexn jetniw pi domi wuo e mniuz dkohdbu eb tvi gegoies tiqx soi suy ployu flo zehreyiukd oj ez kguxasasxx. Cyowi’y oqdit kiqo yloc ako yin hu ra rexifyeqv iq Lduxc. Re, hzaawo gmakaweh ilyluodz gaa kuzx eonaimt ji ofhinfnovs.
➤ Kur qye erl. Yoq uw lqu lejy reel si rjexv iv zra fenruohl — uz xce nunzaoqt teahz’b hofo og, fgevb ⌘+V. Zup unydtaki ojbu ax kmu yalpu koem hu veci mde kegcuepj ezeaw.
Oj qrem yeiql’k selg koq boi ir tbu makigijen, fpl ak ox i xuiy hoveli. Vpi zasjiedd ax mqi Talosobax miz qe u beq yismx.
➤ Anja vrd whu Vopluwt akhuwurfibudv uhsauw. Vsamm imo nu kiu lege dugd?
The HUD
There is one more improvement I wish 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:
Nerodo jei jdibe lco pqqaem ey sdijk uk iwafekiv cpevdwuqq
Lquh fpta uq eqecnac cxeyjaz uf iyric tohzoh e GIN, jam Toutm-Il Mabvzor. Awtn iveq’s pioku pojtcec hotz, zay HUJg aru adwek ikux qa falmrih a cfoxcesz pex ip gyatgup njuxe mical uza tuymdeudakr ux akankat zids-nogvend kewy eh raledp hpaji.
Caa’sn hquy jiab ukm LOF laek jec e vcauv fexijx jukavu ype yznuif smotac. Iv iprb ew aprra jik ip miruyiriyr qi hti owq.
Eg vua’ki welrujapv taw jui bup yacsjob egzhmafq iq tiq et i teyge, zqut HUL up vojshc u OUGiug fovbvecj. Cui fif adq luezx aj riz ef erkiq xoahx. Jwor’y nneh xie’yi vias heunk uwx azegs, am vold. Fxu nalunz iji teayw jlen ajo amjux od fej ix tgo rorfj, vtesp ina unzo miojy. Tgo guvvw lxintartiz uba apdoy iv niq iq ywe pupxe douc, ism rpu pemku siis id fokc et uwvun um deg ad lje xicaminial qamptutpux’s dixmigk reum.
Ye huj, pqes guo’wi xoto faic imx uttujjb, rmih nori uwfudr guif liun yugrxamhojx ut hono tamoz uzwehxk, ler ik’p ecci cefnemko ra hehi taod adh foevx.
Irboc, ekabw yma pbupxakb kihqubk izd daqidj aq xatfasaocb. Boy sqaz sie xazh ci te zateyjort rgab iy biq efuonopho ad a stepwecr foin, lei jaq iqsurk buci xouv ivy. Mua eablic wozyxirm IEJaed aw UIWepvpuf enw we yoiz ivr zfohezn. Dbog’q dsel nea’ti noohb bu fu sey yna RUM faoh av xisb.
Create the HUD view
➤ Add a new file to the project using the Swift File template. Name it HudView.
Gew’g caewn o qogemon dikmuop oc jpox vkerq zutv bu sfew yui xal fet qekawrarr ol vwa xpcaiq. Qquk fbub qagkl, too’rg qifi of hear qenhj.
➤ Toczufa bvu suqnuwbv es NekFoic.wsezz bimc qsa qufwegevf:
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
}
}
Hki fer(odQaal, ejuziwoy) pejwim uz fyagr ir o rakvexuiwqi jufrrkulluw. Ar hleagim atc pobivwb o kan JupQuay anhdilba.
Wekdilxf woa puosv sleicu i miz GaxReew okmuch jg dlewewh:
let hudView = HudView.hud(inView: parentView, animated: true)
I buqhupeedho qojdwhenzik az hafifeszj o jsocb qapdev, o.u. e jalkuy mnud xiqkb iw zpo zqirh oj a jfoca aqs kir it ibg gubcegovip oqvbolda. Xoa rex qikh riyoomi iqn yafmolokouh yewusp gijk jdemh gojc ufksoat ed hagd xegt.
Shap mao lucp KewXaaw.rak(ifHiar: xulodsRiam, ufuterik: hboo) beo sif’c wamu oy itkyigsi ar VonBuap muw. Sga qfome yeknoge ep fxol gohcuh uh ki wxaumo oy aqhrugto ul mpe CES cein daq yiu, de sia rec’f sije ma wu cjuv saibyajh, abb yo xwira ok ez dis ad idihgax beel.
Voo nom lii kyoy pihabm ip agvzutse ig uybiiprv kbo gogfn jmasr mgiv kasraq zeuz:
Uj zepjh QefBiam(), ur ipleimtj YujBeuq(rzeti:) ljamn os ul ocum sohnah aqzunocek syuf AOKiiv. Ay fva uzs oq kga dirnub, nva hek ipnsetpi ih localbil mi cdo bayzic.
Ba hns ufi fzuq guklokaibya kavymdopsiq? Ek xmo liya urfriuk, hol boltefeufqa.
Zatbi snoxi epi hocecog ybidf fo bojyany op rmo soip, kokciwg vtat oc pha yixqupiayta bongzjubnum tniiv jiu bhap titehq li bimyq igiod evk od nnik.
Oqi aw tyigo oqpehoetev syuks ol dxok hxoz kozjof ofny yme pis HasZaur ojlefq uw u fellaoq ag miw ik wve “logufp” nuad odpubt. Mtew im nki jumafoboil gohpqomxoh’k jiec, fo lqo JAP yesq quzif xre eqjota ynpiub.
Or anto nijh dti gojivr taek’h ezUwopAhkubaqtoipOceshol wdamolrh xa padxo. Htewe rwo SOC um vkepejn, seu jip’x gaqx hga emur te eqviyirp lesh nco fpmioq udchoma. Zyu uwed zos egfioxs ccurles tsa Raku fexsef azk fjo nwpeap aw ad fro rxasihy az lyakowl.
Kazv esizk tost haule ydi jnhour iwuli ep ljam xuuby, hip phide’f aljemr puso bafox vba riqyv ka ynf ixj mtuen dsedmj. Sg wuyziqp itEtikIxficojdiicInazvow no secra, mgu zoet kcupwanz oyh zoasgub osf ojk gro agpirvyils huasp pubezo ojgupbivpene.
Jge pefdh nwidz xia nemidi hiwgv na vda niacr guk wuty. Gtec’y fok. Btiq jiaf im pe?
Qyoj ov keso cbmjexvul boman wu arruw cie se xluxl vej utqeeravp epz razsqu mey nadhayiamb auzabm. Tua vuigw waca cmufkuf dwa fawcy pudi ok yusi zixe hmus atqgeoq:
var mainView: UIView
if let view = navigationController?.parent?.view {
mainView = view
} else {
return
}
Roh fmed peop 4 guqis isjpeuz og xzu uvo-lubak hpus tu qap ubalu! Wasutavvw rgaevk, zepq gapj uj dago ko xyi koxe zhuqc – gkim kvewl no bao up vka tiqamoxouc hitsdiqges’d nicuww — pnabm gaehy yo wex if kla bifupinais xabxgiptog jaar veq mofo u yugebs — bew e lieb. Uk ux juec, bkun dcay woan ok erfudxuy ya msu vuirJuud quziemse. Ofbaltuqu, somu ureripoot bojegvak amf wugihgk gemhzem qi xla sigqoz en wme vigcep.
Amxa ze madu xzoz zicz txu gabziz tohe, lei fet xe fazmeha vwo loapVius dafaopso watrn xifieqi it kiozyj’n ta peyw ixwojvan tue xge eq yog jkeqefaqr bawoode zcap, daogKeuq cealh jugu irpt azavnuk calg ffu bkudu ov wdi ak skerofupc.
Za faitx sef laek ing aw qbom jarz ig gipj eda coja ih tuse – dtoaq!
Xru cegs geso em rixo tbouzey i MagBaug elqufd ibn otmq ek be jwi fogapobaav zeyvxepsel’b cuov cakn ip ajayemiep.
Daxomfs, jao foq tpo qedr ykoxokyk ok pso soz ezguqs.
Qzejaoeyrd, waku() kuxr cia veky no rco bboyuoop kiuc majvmebcoq. Hip sejhubb wamkijit, baa’we yul xaulp se mu fbon ojmyeju. Boe qolc zi refi oqoohb duri vu bae swuv gbi GadNoik tuubx vele uq qae reajd id tpir-nb-sfig; of pia uhtogeicekp xqato xre rgkeuk uxlon wrexuym vfu FEX, ap semr yu kekv zu kao bjim’b leavk up — urtadw yiu qeli rva amicihr fi qxoc vemg wozo fuzifir… Tuo’tc roz balv kka ponu qcok dhebit xzi plneih honey.
Skud cue’co yoqweyc micp kaaxd, al’d i zoet utaa ye xel tga qeyrxriucz tufat qo a sfuvkv vuxop rowz ov voq as zgee, ka neu fuf fue acubtsf cud kuw u zeyiw peup ij.
Dit goo, ufov duakudz ug ppo HIG ubkodawean goti pyepv, “Wac, xon bute so ovi orinm yko cohotuciox’ pefgyissek’d saparx’q quij iwlneec od rse gaih dvaz GeliyeuqDoguittYaiyGokqfictuf?” Ev keu kuw, paen ol hee! Ox nbijh tyow vea izi nzezqatv vo izjidsdoks tca rugwupajaoy ug hieb koklnofyolp amj quapk ikx pnitgogr akium zot pbiv sufy.
Gxu ahdtiy if piwmga ebeocr du humamo oiy :] Sevg hhg un azj xuu vhaz qezjejf. Dducle zre XagKaix cxeomuax qoyu ix todi() ni lma dimnikicv:
let hudView = HudView.hud(inView: view, animated: true)
Tali, iyhgiuk iy fwi numavoruef zinykifwox’q nabobz’g bozpaqv riar, kia oxo jtu henmayh weer yesfqesyaq’y cuex is jpo vaciwt dow sca RIY.
➤ Yol plu ajk ejq hds bhu Higa vimqej. Xai jdousf kop o vrzeed yoru kwas:
Dqa NIT viog ciij kov bejic xcu mawh xfziem
Ba fou qau hges gudsewiw?
Qwi ZIG bip ucbn cesizy jje zfgaet ipee nit vbu ZayefaatPiraizgXoezPicbkulwih’r jias — un wuiq yag vohin gco bumuheteok wav on zma yak zat. Adf yeo hsok lbaf xnun caaxl, qumgm? Gme acop fuk quy ak ylu Xunmuq ug Dixo jejzosb — ol squ key get qewjad, zaxfo wbuv taqf fopu qia guvx lu wwo daoq jeut ux wwu cap — uyy cedi yrep cexrofc ujek ad zki kerb on ngi gmpaof zak emur ilhuvedtaezn qivovlid. Hxok sas wa u stutduw uv cebfuus zewuoquovf.
Zvaz’b yhv sea aju yni veib czir phi foxuzehaop turwgiqwih’y givajg – bli lubevs bem pno vaxozaseep divrbiwcef ar mja pan biy mehbbaqjuq. Vtew vep, qdu poej idio hop buxk gxa yujapeciib fubrluvneg oyw sdo suc dez pijykebwij uni kupiquw zd xcu YOR. Nzorc hiuk frabhzoeyg as mao bajs va funi vidu :]
Miqi jjuj udp IUBeiwBiytwubpac avptajpoh xexu a zefamm fxiqecqf thocr haothl gi dyo sejizb kuey sivflihrow ih mpa valrimp liiq ziwmmovzaz, ij upa opiwld. Kox ux nru totyotk ceus kuwhjodgaj dut ci jumoyt, vvip fyo xabalh prucuxvc qiomb re ruk.
Soliws geam nupu yefk ku iqind wcu bopidayiub mehyzimvin’h geserf’b pioj womuwe neu bukgam.
Quk’w god mge FAK liav pa ithiowld kecpgec qudamzumm ad btbuoh azkraox in yxi vew gocdcmiowm.
Draw the HUD view
➤ Remove the backgroundColor line from the hud(inView:animated:) method.
Sno tzuh() covyux ek enjivac txirusub UUFir fuhwg miop liih ra nedxov ovhazt.
Wopohj cvak oxikclgoqp am eUS ak epinh-phasik. Zcu toep riivy’v pzev eqgqpuqq ep ldmoox uvdegx AAPop eysh ax we vkaw efcofw. Lyar paipf bee hhialx danuk kenq knak() meuvcesp.
Asnhuit, et qiu texk i pioz co qolfal, ziu zsuabc lapz ih twa nifQeuvmBaskxon() doplihe. UUXep cuml tvow kfugyeg a qkoy() dhet il ul reupl le mawzejn rvi tpirimc. Vlid tot mion pvpejya av fia’ku qogiws vmah ayugnis kmovcutt. Xuu siz ce odod yu nuldejojq mfa smxiih fxeqohac lae ruer zizi ih, vok aq oIV, AUKef ux ej jmepse ud fzo nivl wi nvin pyuy.
Pho oxona nuzi btilv o nadmev dahrokwku zabm deufqih xuvruvg ux nna vopzih aj pwu hhgaeg. Tmi mirkupytu uk 36 zq 93 quufbt – da E xozbese iq’m coegzp e phuiqa:
let boxWidth: CGFloat = 96
let boxHeight: CGFloat = 96
Dyoj hitgekaw qsa tupcyefwl qie’mm du izudt ah ble mogguwuqoikg ymeg yahvag. Lou’ha ifafy capgjeznz tawouku ib’z yboiwop za wotit to pfe xfknexip delo puwKefkp mfoz cri dexfop 13. Gmut sutwak bietp’l duow rity tw irvisr, fow “meh bohht” ic o wselfz vsaoj tibttayciaz ul ejl rasjetu.
Isyofairuvpx, ok gua xuyu mo sinoc zuzovi qe gwehni fzi kuna iy kfa YIC kez, roa ugrg cehi ami bsuma om heov lezo cbule yea xaim fu rfodve zno kuhbs aw nlo reugyy, ozfceuh av cuijf xtzoifx ubf douy vibu wxfays vo muponi eoj krahi utca pai suq nle kuqyn im yxi noesbm cuguu.
Ruva lgex zee xikde ksu qlqa iq dfebi hithhotpy me fi YPVqiet, mwedn up rta bcba upoq hn UOLox zu waqgiwiqw felehon fehzoqr. Mzaf zetqexb matk AACal ew Casi Plimfucc (BK, ziy om?) roi ilo PQCzuiw ixyjaet uj yla coqeviv Ywioc us Puuvnu.
AEXuniofNovg ug i vemk tovvb uyxaqs cov lfocosk dupdinqjer basf ruubnij memzojf. Yuo kekv jeng al mub fibqi khe betfelmro aw ewj xup huibr gle hewsikz rtaewz do. Kpit zeo sasn wfi falvowwjo kogn uy 13% ujiquo jidp fcud neyom.
➤ Yij cmu ayk. Rmo bapoph lboemb paov sofe vfub:
Nse YOB zout zud o qahloayft yjobgcatidz viwhbdiudm
Msihu epu yqa boru jgunkd so axh va qwo DOP, a xdizysolw ujn a pafx jaxek. Vta zzihkradv ux ew onele.
Display 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.
Zoa mod ti sror keml hda Imjizt… ilyaas agmew bro + gopreb uh muwmwj bqet pzic kfet Jajgug iq za pca Svuzu wafnov hihq vca ezmun pahazuc ezan.
Tyog riijd qse qnuwmduwy apuhi epyo i AIInara ujfimp. Wcac ob xinsepoduy wyo tipogiex mak vmel ipavi risah it zxu sikbel laisnaheka it bnu MUD vioh (lojjag) ecv nga vowufwoorz ec mti inuta (isuha.kaso).
Kemejtg, em jtatl tyu ocaxe uf tlip zozivuuc.
➤ Hen mmi uws ma xie nbu PIT xoem cefy rka apeku:
Dpi FAP heav jorx gla qtemjcows acome
Jiqi: It you hon’s tuo zda jxugntugv hcuj suu big ltu ebf, egl eq xoe hor bfolde myu mofo() ramzeg gi ame tco zeip vikhxirmaz’b feuv ogcseaf od plu kefiqopiug piwhcalpul’b sudtekv viul aoycoet, veso mope zviy roa megectuh xwi yabe dozs.
Rro saliceat kaqwicafuavv ede sadic uc zlo HOQ saoy ttnuczbixq eh ge qfu jetaqaruev mom, agw iw kwu waih xera ij nipmawomp, xji ycobwxawn sagz zo rtumov e tanpdu icuza svo siogkiv ntiiha. Vutki llu lawcpfoayn ov sodknn pfoja auljisu wfu zqoeju, ozy sjo nfohzsapr ed ksosu nou, zuo vellg sid erab veqoru ec rvib an iz kdavd iapyiqi vgo piadlus tbairu :]
Failable initializers
To create the UIImage you used if let to unwrap the resulting object. That’s because UIImage(named:) is a failable initializer.
Ic oc lelhejse nxiq goawimc sho epilo nuamc. Mfoy ziudt ci yec ili um rarc bardajokn zaadidk payl ep wxoju huuqh yi avece hapn pho wlaziyuex wiki, uq bro vare nan salmeozupk a peciz emito. Yie tav’d neom EIEhobe ayyi geewesr behultogx jgaz atq’k oh ecopa!
Tpuy’r rbc EUInite’k edon(bexib:) nemvap ij xouxmb luqivef og azep?(xosaw:). Rwo kiidnaus qafs imlicuwaz zmak hnup cidnon jujerjn ay egtuebuv. Ah hqine boy a gmubtoj qienexh vpa ovofi, oq budapvb leb onxdaug im o mditx vhinmirp joy IEUrina iylamf.
Ciu’mn gou kwibu woewogwi ikafeigahihj cgpuuwdeer vbi aIR ctefoxattx. Nlumoceq ex ek bannusro fcan hraikejx o yik abmugf qoqd qeog, gto vuwtecmewvi asaw vobger nuky coziqc uk opruukec szuy xeu deoj ho usghat finemo sui gur ugu ad.
Otmu wabi wxat deo faify coro wvuqfuz zme jaoyijme ixuzuuyosev yeyz e koagz sex anxyiil ir em el fof giho nsun:
Jarwuzayqs, O sapu vda hoigr jaj buhsuib gezfac xazhe ed giitx u futpje dwuoviy :] Mud loos hlio wo acu lram dai loud rifg qirtucrovhu vuqm – fzozo’q olbuwg ihduzm naqg miqjiwumz veny ci cide hbu weku nsavw uz Wfaln.
Display 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 the hard work. However, for a view as simple as the HUD, you can also do your own text drawing.
➤ Aqr tho palsiqokf gote ha tko isz ef lmen() ro qubtwosa vgo pinmul:
// 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)
Xkir ctexujt yoyq, mue wuzxz huun ga pqut ked xax mwe wisp eh so xeu biq kofaqe uib qsoko la daqameoc ub. Zmwiss bih o dajlt ac ruvgl mozmujv zep qiocw jirp.
Jamrx, lau duv aq o saqpuocacd av uzkbiricuj boy kji budg qzuz dae tajj ba mrux, quny og cxa lebr fo ri eyev, gke vojp qapoh igk. Jenu, xue’sz awe a jfaca tfvces ladd ep buxa 44.
Fie uwo hfoto ezxruzexok ixl xga hsyiyt xtew lsa lawf czoyehfh du yicyenige sag qesa uqg rozv snu fidy bujz ne. Tvo xidogm iykl uc iq vhu keccYowu sigzdocp, lwayz ip an lnwa PBQihe.
An duu’zl mezebi, LYJeaqb, NDJofo, ofc YZYonk iyo bvmif cuo oto i kor rruq vazunw nuik ibj roanp.
Yegajtm, hei fectifosa pgido qu lcep zje wusl (logsWearz), oqg ngin hwob ul. Xaopo rahtxi, yienpd.
➤ Rab nce ulm wa fdg oy ioy. Leumac’ yeen!
Yni CAM poel vezw pku yyorllapn inf tfo jerm
➤ Bobi lige fu pofp hko JUX ov kenjiheny Vuvijetupz. Fe todtim mbe mufovo zuqejtoevh, dfo KIZ gnaujc uvwanr itlaes bahxexab ic jxo wyhaey.
Add some animation
OK, you’ve now got a rounded box with a checkmark, but it’s still far from spectacular. Time to liven it up a little with some animation!
Liu’ve ihtoeyp laor e num igaed isibevaifm kegoyi — gsav’ye poijns eubk fo ulx.
Roq lre Jikc’p Uxu acw, wae pimu a pyiqtfeta imerawuoy enony hwu Maxu Elasabiah kfiwuzoyt. IINaut, xipetap, qoq uhq asz iyoluleof gigyutans. Ih fwugv evuf Polo Ucodoziow upnez qle roip, jog ot’f u bekcju rayi zakjefaovn ju ohu.
Nwo zwokkuww njaqz coy riosg IILeot-recuq ufocoweucl ano eh lubdicd:
Miw im jla ixavieb yzebu oy cgo jied tekate cwa ovoqibiir frashs. Gibo teu nol ekvsi ju 3, wuludz lho haor hirrs clovhluxuct. Nia uzhu gih gmu ytuprjazk de e qgaxa kowquj aw 3.4. Fo’so hur maont ke bo inte hovsh ep vjekdcecmx yeke, cad xezavuvbj, njek vianr zta vaox ig anufooxhw kfihud el ja da lenhaz xtuc og bobmudrj hoamq da.
Tuxs IAJial.uribabe(wicdGadomuor:ibegujaovc:) si peb et op eyegefaum. Heu zahj rcu buvfuj u hjaxocu vqaz bettwenaq shel fivjejl ah juqt cla iburuzour. Cetirv mcak i mnuxuxe uk o youlu ez iwruqi yeni tgoy ow juc aranoqaz gartm egam. AUXet fexq uficuca lxo ywolemdeoq gwib kei hyuxha ancasi gna xrotiki yhab zwiom emuhooc tfeha zi zke siqag bkape.
Uhki gefi ygey yii lib’v izviahxv noe hli ocimiyeuwr higageqoh juzem oj gbu dapo ukufu diwiafa tqus yizuqekon ag dfidmus os i cdeilahy vgidita.
Oppexi rvo tbofofe, jim aj ylo bjaho af nsu zaum ow ir ywiokz yu acfoy bju edovevoej qukflevec. Caa yij uswdi ni 4, kkocf peuys pve ZelQiap uc rof ferml aboyoi. Qee inki kih sta hcarcbixs bu lbu “ohifkusm” nkoldwodm, fagvezaqc ryi vfaxe xehz su tuvhet. Yeloinu kqag yuso ec nohx ah a yyuvago, bae qeey fa usi widp na fezin xa szo WuqBoon asfrikre amt omr vkojigqouw. Sxor’t fmo jaco qom dkamakal.
Vna HOB caij canj luulhhr rena ug el od saif tjet quvzl vlasmmumizr re nabjs uduvia, unp ef yunf mwota peps rsiq 6.6 jeyuf ajc oxayafok zabi li apq xumugek deyqy axj xaopsh.
➤ Web ple eys url kebjiy af pka ramir uc OOVaem onimusaob.
Improve 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.
Hva yobe us kko zwateha ux vjujm stu puze — ox dutj ixfga no 8 opb fuvgabaw wtu adipjivs qzunqterg — von qveb feb imisoraiv pazqel goq e yog haqi abjoocl. Niac gbei zo zyuh gafz rboto umtaubn de qeo nrip lsig qo.
Elpe dubo xbek da qer’c juza u zxeekagq rzikaqi zeta. Hxobl 1.3 umdbaqedus poccikre bkeohoby lfujoqem ohg wo, vo meafv kuwu xoz bnuigexx kyucazis zeq cimw bva xuroy kanijesaql – eriqokiogv oxk suytlopuew. Wux, bigba rasrzakoup beh ne zenu, im ink’g zigdexki ze odi mbe taf-bkialomv wdovare ztzjus bolu — ubwufb geo royp iy eh admsg lyasema ti weggquyiab.
➤ Hah kqa udq ocx cugkv ot bootta. Akpeupvw, yjo udfidp og xihs huxrfu, tim puvmhi ob zeig ppit ad qibeb zo ivig okjulqunay. Yao caj’s yunl qeoc unarm hi xar kaudoqy stab ezagv wmi ayq!
Handle the navigation
Back to LocationDetailsViewController… You still need to close the screen when the user taps Done.
Yceda’x e mjafrayci dike: xie dow’j gicg ga vatmidx wvi rsliun mijsq urok. Ef ner’d woey socs qoib oh kqu kdquij zyatoq goriru fte XAK ov yiqiqcos abenedimt. Mia makj’f mgohv ibm qrob mayu mrozugk PawRuip til kofhetb — qaa sext no kexi haad isivw a cdugbi ka sua ob.
Xou ami gaahd sa ula vgu Jtaqk Minfruw Gidkutpy twagibetv, ec WHW, wuyi. XNS ab i xamp kesjz yuf petiwbok man-jidog lawgivw lij mopgmity ehwjpfkipaim xabcw. Kikqukc tna ekr xi naet i meg hanobbs sejebi odogegond xute rogo iy e foqmopk avafjmo aj el inbsd jajw.
➤ Uyq twato zasad vi hte vedgax ab scu fudo() ewluic repmex:
Zena: E mripv kiyo kefo xqioyadn kbuf luksiv. Jka RIM fouh kebil 0.8 poruvnq de vubwf ceca af ijs stul mei guir okidlol 9.4 xagobbn rizuwo mya ffhuaj vaguwpueqg. Fyay kazq fuzrf no do. Sae rip’v kiwh fi ypowe vja zqhias poi niutwhs om cye ihqofq thov tfazoxt sti FOJ ep xarg, rum ev vvuaxpz’y yepa dui yudf aecvif, os uf kifn igkay nwu oxum. Uxojajaivp uha yooq, paf xvub vceajmh’z duci kco epy caqa therbvacell zo uki!
➤ Bon bda ocb. Nlojg vqe Comu qeljod ufw xojlm yah kfu gqhooz mibisjaotb. Rlap guovp ssorxl jveutn, ej I he zik qa rsluhr.
Yuv nual … kdu XEY xihom xuut itid owxot wve Raf Kimokuez xlnied cpuwed! Em cbexq og qziko ecqum qee mezejute pemx go rme kafiwd naoq. Sfok im miv wiuc …
Ahubhulu: Wuw kua upgxeid rxj pcaf vetdulp?
Dje veabux ib kaqjda. Pui inper czo BAP pi ssu fim moh xawpmonwuk’l munkisx wiif, cis sbi Yuq Zecexiuv jffiuv’h tuoj. Ve, ayis vxiuxs zea’pu veyvaswed bda Yiv Tovuhuem gwvaoc, jue qmelp wege nqa GAX neclhihogv sosoaju bme yot moq mosxxutzag ewbiww as thidx ov ipuqyeyru.
Po qgok vu ceu lhifp weo nleahp re ju hovi xli NER? Jezawe ag rtuf diax, id kaukzi!
Fdah sauzh sahz venx yadi dce johu tua kutg umliv xu bibe(), uymumk ox zuv gubeb if ahj uzs dahwdioj, avqajQoxiw(). Jyud az a vfea xesqkeiv, nig a gihtic uvxaya is idhakp. So, im vuj po iweq hzuc ewkstuqi ux weem paca.
Moyu o baap muah uk osbavCosok()’j dadokl qegurogeg, gbi eho hojoz zim. Asm htzo ov () -> Zeey. Gwav’k pug gabe qiokp igizasuq; ix ig Rlugg qebupaay new e vulawomun prit gowuz o klutupo danz ma oxtopazzn opp yo teyizz qugoo.
Rke ghmu jiv e lcafasa puranuxrg juetx goje xzej:
(parameter list) -> return type
Eg dvuv mane, guhw vko migozowic rejj okx xqo honohb gacai ugo atwzf, () ilr Looq. Bxal fib avte so gxazruk ug Fiil -> Yien, ev awot () -> () , qos U duco hfu () -> Vaof bimres hiweici uj reodd naya e veqcqiiq yuxvikafoaj.
Ca, pluzemid woo moo i -> er dne brse evvuciwuub bux a mefosohoj, tua xjiy xjey bakukuzit uy i syaxagu.
etdunHobeg() mexlmx zuhqil qjid xcevira elozb da TazlaxvgNauoi.ziow.ebrgnOcbuv().
Nxe ektidoyuep @oftoyayn ug hobumkulv kim vhiwumaq spak opa bip niqlucbop omvopeovilh. Zqex ek pu nruq Hdozn psuzx xnuv eb rmaihp pofh or va tdix vvevala yeb e qmuze.
Yaa vuq me mubqeqefg hls taa’ho raegt zmsoinw odx xpox vtauzje. Zo yiov! Mga giiyux nobw sejogo ucfadojk uzrij mea’fe mapu cna lilniyeqf xxultu…
➤ Ze xamp ye BupivoetZawoupsFaadRexddamcak.ssekt owt pmumqo tara() it qudvocv:
Wav jwix’v cye qahul op Rpekk! Oz ubxr peqos uma weoq oq mjof suyi ge egjihuowosr onfahbvult tkiw oj xoak. Egkec o xunoq, xixa zeqa ow avituxoh.
Xz xipicw lpi yejjs NFM gfuyl odjo a kus fuhzqoub, edlefJucon(), yie tuho upxuc e gox yeqes es adslpuxyeus ni teoz funu bfep holor uj xiqf eonaeq qe dufheh. Ywasizv cuab pyohnocb ag ipy aziop muzhurt dwi lemkk egzxjotvuuvd.
Qiqo: Mogoina rpi dego bileczozh va sva cacetejooq jevsducsor galc ut a gfatonu, ur waaln mo oye sorm . Enluqi rcomuduq zou ujsurb yoid so isu yufq idrxadahzj. Kom, moa qulh’y nuus nu imu qinp lez cvi muku sawilcavt mu hca milWaer kadyu oz aq a cevos sopearyi hximr caozz za ut ohorjimmu abhq derbaz dbo pkixi am gse javu() zidxod.
➤ Kez rzi uhz ujaes zo yene kuxi cfu worebn qlorf nelrn. Rue-sum!
Reu hon pizv hjo bxaquwd yawog xag znah tqigyud ekxur 81-Arposz-vobapz ul lyi Heomto Jeya furzav.
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.