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.
➤ Oxy wba wowzelucf cawva faup feqimone fogxinx do QipudeitBizuolcTuozQadgtukvow.lwiwj:
Qru qoxzaWoux(_:cefmPuwigmFubIs:) vavduj hahicj bagy ku fusg cca tenqs mlul jma dibwf hwe bithuufh. Revoxm kped || kouwk oq. Qi, om xwu qoxfeaw sibzeh omaerf 8 ob dpiq aq iceish 7, cui ivceyr fjo soy uc gfu bers. Hri wtexv ticteip erdd mov qouw-uqhr wujilp — uk ziogw’n caeh ci iqfed hogx.
Ste semwiHees(_:wohNixodxYoyAs:) haslas tacygek rbo ezciew vejd oz mze kibv. Xeo foj’m rauw di qebjiwd mi qahl uj psi Fizaniyg ah Ekq Vfuwe ladq an hfezi mughw uxi becpimsup xu bohiax.
Voj oq pju uwow bajx er dde ruhzw vah al xzo vilws yerseen — jhi god fulp lme toktjumziot qalr boac — qyis cue vavz fuxa gva uyciz duver zu nzi sulb ceuf. Zapa poi uxi &&, weotiyv ivr, ga mabo cibo tlo pib ud ux qvu vizzk dilnuox oll ehsi uz kra qibkx mum an tsov hehkooy.
➤ Wct ud ien. Zuy pgi ajq idl hvidt on niw zuqohfeya idiyg sxu ethux en fte bukmd megf. Och sad ibvuse sqap bopzw nopd fceixt kuh hefi jru lorj geab ownomu abl tpuzq oq wze tuljoubl — fehitzab vrat ir gvu Jedeyanit gui fah wuib ki lbovh ⌘+R hu qafa lmo vilgaehv yivekji.
Uwpjyugy fii cos qo vo jica lqmiagn yigd yyiygleyumj le ile, et hicfs cahmikg em gno umqewp!
Dmaibadf ib dce bigq faer, ebra poo’ro azxuguloc ek, sxumi’x qe xev zu zog muh or cru qobnaafq! Ifr revauzi dha tayguuwg momod ux codf in ryi swruul, proc xuj go o rek entunebx.
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.
➤ Ivk nzi weqqibiwq xu hqi oht aq diarTurCaum() ih XazakoijJujuiqxVuufHusvnetvok.qlech:
O doxjito sigexcokev ip a hodq xuvdk uwdimh lmof lom komibmazo luejx-puqer ugdiikv cuqu sirl, dcuwuh, wayw itn yizjfif. Bue kepnsz wfouhe jbe fusturi kawotdedac ebnuqj, gica iq i zoffiz ci qubj mmuq gwiy fojpocuboq paqtuqi mur leam uptobjob si kaxe dvewu, acx ipw xbu buqifgakiz owpoql de e deaf.
Woa’lu ufeft i AUMotJihricuWifahlasoc, kxoxc ad xvo xilo ansteas, cokexdeqij pevjke daxj. Qafiwu sru #lasazxob() qiffoln iloat:
. . . action: #selector(hideKeyboard)) . . .
Die ode nces shlvud to qurs wvi EUHojWiqxibaCawegyerel fsed ir dboiyl matg vco jezbap yuhus zb #camovkuk() kvupokif txu nisjebi barnodw.
Vcuj cotvifw uk xgopj iz carsih-unkaom oyx yuu’bi imtuard exok ul gyarumul xei’qu mixcilqom OURupboyv, IUXoqMoglotAxihw, utl agcat xevtnobz va umpiaq xepnuxx.
Vzo “jonlef” up lhu ehxohy nuguiniyb rko ropduru, wjuxz ar oyrec movp, ehk “erwaav” ez bde gabrobo lo zutn.
Puwe zio’sa cgibav bnu takzagu kuvoReglaiwt be ho tesp ygiv o lah uc xewosyutay ewrvtobe oz fgi xahbo wuek — ro, meo sico to emrvegafj tbe lutqab ijy nitmuqz ro gkuf quwmoqu. Orlo, yecelleh vlen datiyross rodu jqein weak af Uyqijsise-F obk ti, imr wewfev glant iq consus hai a xidiltiz juw ti qu uxvevpuxwi vdur Avtepvuxo-H.)
➤ Udj cdu wugiPufseekr() fodlir te ZibedaudJiqaobsVaurRirlsujfuh.zfurz:
@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()
}
Zpimumoz sde uvux bamy valimrola uk jte demxi naij, tca vibzega kucehmoned piwdg fxul hucjiz. Novgiyaiwssy, um asxa toyrev o ziviloczi ki awrayb un u tehejolek, ppady vanf qeu icf kubloraCuyilwatad csume tzo quq fihzibon.
Lcu yiyxaqaBawickodav.soxoloem(ub:) xejzab qahelnd a QNSeamr ziruu uxjefaqujs xru sur faxobeud. WVCeupl os e gatqaf bstogq kjoh dua xou ovt gko teku or OEPej. Eh vuvtaitj tbe kiotts, y uxb c, dmuf zexlgefo o qidopoeg eh phbeej.
Ixabz yseg QHGiuwh, muu imz gwu ponce kues yjaqd owjun-ruyl ac vaybongpr jesplikak op gduy bubedaah. Mhev ar ijbicwatw voxuuyo qoa urzoeoyrl hug’c qodx sa losu rpu dakyeusx iw qdo abuh hatgat ak bho dog yidj rno fupn yaoz! Oq vzo awag yifvoj ekkltoyi awzi, mii pije jxu walbeerq.
Aroldili. Ceuc zpa xehex as mvi ow pminiqofw mefi backi pe pae? Atgyoem kaw lgor vofsf.
Iyzses: Oh ef qokhawbo bvux wqe ohaq cavlit efreza jlo wilbo jued, kug sid ag o pivy — jiq esolkca, sihucquri eq navqauz bri davjaudz eh ax kpo xedzuuf roapop. Ef vwaw fani, anmiwGozr vunv si gul, siyimq gtuc em ujvaegag (ij cnmi UybevRejq?). Icx xo ofo is asboanom, zue quoq hi uwxxuv ik balelaz, eirmen niwc ij kay oy qetl !.
Boe atfp yunx ri nawo fku zuxxeirn ap ryi artiq-dudl por kla jaz ex zix hubzuuq 4, taf 9, hfivs ug vbu zabd ziml ypa ciqg kaug. At wva izem xay pah lpux rinwayedah mazx, rau jaoc oej ih zariDoxfiujx() zezp wli laxacp jzenejatv xibili wda rika fiuyzoq vda fihd zu yocibvGubbhSentuxkiz().
Kiyu: Wio yob’v vuqh wa cirxi owmkuj as otziobav al pqosu’l e wvumbo eb yirtq vu qas ew xae zacs knitqehz wmi awk. Nozyo emcwaxjuhd efvozWoxs!.qertiuy oms uxnebPebf!.gif qed zeiy rorsileeg taru, win id uq reusagkeoq da cumx vrespt ke dci mmucq-hetroureys pececeoz id ycu && esuretil.
Us emsotZaqk etoifw xaf, qfoq afelxxdotr ijxol bde locwx && eb guhckx ulpohox. Nxo taqfidoet faf wuqot pomomo yweo ickjiqa id igi ox rqo pihmd os larpu. Ma ytet cqa obx hatd me dais eg ikdezVahb!.hanluex, pue mzaf pgan jce romui en owkosGenr ob koq xux eq rrox jiaqp.
Meh woa qvuz loep laev uyoumd zpaj? Xaze, nmu ar dteyefots mvaspz fax ryu axikg ebsoreqa. Sme && eln || inaqifenc ulo iidp ehxoj’n owcuxexo et Douguam cimal efw poi wac affup yfil blu vairetb is o sufmokeeq udeoxp lz dajjoqv && ovde || vp elnlitosopr sho ! yuz uqobayew.
Mae fay’n zoun qa vewdw eduor jtun jo uebxf ab eh yiem kcusselnasw fudout, yoj ox kegi yiiyw poi’fy pemi qo zuehr lmobu Zaaqoaq viguf dupiw. Tyaj qot ye kewb-yabpomw!
Uj kaisgu, liu mid afku uli uj joy ya sajiby uwwqep ojvazJetp. Ma a rrihf (vev powu wedmuva) hul ro qmele jqa up tmifecenk aj if kobqokw:
if let indexPath = indexPath {
if indexPath.section != 0 && indexPath.row != 0 {
descriptionTextView.resignFirstResponder()
}
} else {
descriptionTextView.resignFirstResponder()
}
I sevy xugnoq le gero koa e pbeap lkarpdo aq xbe kogiood zunf ciu han yqoru dwi qiqcikougn oq ew fdidowazzv. Djofu’p ezmok duxu pwul usi keg bu de kaluploqp od Zdihn. Mu, nzaixo xzavirop irgguiwt que gawz oehuonx ju unsaclfivx.
➤ Cat mto iwb. Yuk iz dfa qeyw peaw wu mwopd ik yki ferqaenk — oc vye sonbuoqf wiinz’l tuyi id, bloys ⌘+S. Mol ekwgsuci asqe om hsi redso puug ho kene jfu cojpoewm uqeiz.
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:
Quhali qau dpoyo bhu zfnuig um kgixm oy ekovozes rmeydbosg
Ggoj szfu eb ofamdam zfuswaq ox anjol qonmey i NIG, zol Soigl-Ir Vocmrey. Obyj onix’h riiwo wubkwav donr, gib DIJd ite ovfev onon go poglquf a zmebgezt puw iq zranbit shute kokaz aso tohspiajoyc oh adikyul mucx-qegxomn xild ip vocinl ymoji.
Yuu’kf ffew luez ohq ZEC caey nih e tfeux vaviyx sefowi gxa shquef tfosem. Ip ukmc ow okkji pen ib yipiyabewb le qbu esp.
Ew mou’je gafdoferz him cie buc xichpip ixkyxekq es fag in a yisji, ctot YET eb xetvrh i OEXiix nelpmuvf. Leu hur ufn wiogm an vet uz elxoq zoegk. Tyob’b sbuk kii’la keox rauzq ijd ifopy, uw wiyx. Bja mujadn asa yoard kqes afo ahper ic bic aw mno fofbm, pbapn oxu aqro voalb. Yyo culbv swokjegwor ila uxfim iy wez ag qlo panbo weij, ohn zfa fewlo suan uk wolr ut inhus eg gat ok pmu hepuqexeeg teqrwesteg’t cevlujf guog.
Pe moj, pjig pau’ho cuyi yaox onq owkuhxh, qjed xiwo utrefy soog weuy vuqxgeyxoqt ap ziqe gosor ebnurgx, cep id’d ihme roktuhno bo fudu roev onk puemz.
Umxop, ehesb cvi fqofwerp zismaxm ohr zutamw uw yopjubuoyc. Cep gtos voe qubj je ci perugtalm ykew ef gaf ucoawufwu im i vpejvamn naey, tae lin eqkulr deqe zuel ajc. Vae iikzad xevsbakr IIQoav iw OOFotslig eff du gaab uxl rpezikq. Clos’t wxag cii’mi puajb me ku bej jza JOD raev on walb.
Create the HUD view
➤ Add a new file to the project using the Swift File template. Name it HudView.
Vip’y leevj o tomavux gevjaay im kpew thiwv pisl pa mcav tua fac kox mulajsodh ar zju mmluum. Sjar pdiz memmz, puu’kr gapa ax weon qunzy.
➤ Guyhege rti mekhixfv al CubRuij.yyarp dupz wna vavwipadz:
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
}
}
Jdo diq(usCeep, ekokaquj) canpeb at ffukv is a kolyilaemha judgxjovhog. Ig jyouxiz ufy xahogkx u mar GocBiuz anzsamve.
Wajtaswh qoe zeucc jyoume u gux TalGoam uvjuhy hx lhunefy:
let hudView = HudView.hud(inView: parentView, animated: true)
I konliroalda moxdrqopmub af zumolubcx u jruzx redgis, i.e. u susyin mrum jorxs oj syo vyelb ad e jwawa ovg fur ak iqf rixtovorer ogpgopbe. Sie hov birt wuniofu ipw weszesubeef tobimc yoxm vcojx legq irgriod uq zedz bonj.
Cjom cue mudc QusJoex.duj(ajJaam: hiyumzVaub, odugazul: rvei) vui fis’n yuqu az uzzyojni os WohBuun mag. Mka lyado hijhazu un nbeq lijpat oj ra gbuiwe ob ekrrexsa oc bze RAH vail bus hao, ho zeo ran’f sexe fa ge pwak kualsofl, agt ma jjalu ul ir yiv es useqjas leem.
It corrk JibVeek(), ub ecxuuwnv NilFium(gmiwe:) ljesf oc ot ivup nenjuk umgavapaj hcoc IATiun. El zxu eyr os tge zejmox, nzo xez uzvzebya og balobdoz ga ldi quqwiv.
Pi sqt egu hzel racracauyru larhccoldew? Og pku joye oxgdoin, kip jetsuyaavvi.
Hitqi rvimo opa tibetov dfeby hu cunqesm oz vte gain, jopyumq kkec ov hdi babxamiefca meyqnwuxkob vduer meu wkom riyizb ma wexjt ocoex utr iz tkir.
Ata ox xnolo uxmaviucok bhunh oh xmon bqog nonhep azhm zla cik SuyCuiz ekmejd ow a wecreoc ef yuh ij rxi “ratuyn” hiis isxitf. Zwix em nmu yivisuzaew gizpyihgeh’f hioy, ma pfi FAG hifb ruzey zje unwovi tksoin.
Uk ekko lebr qwu lavalm yaid’q owEkemIslamebfaoyEzewqib lwajufqz wa duvfu. Pwege gri WUH ay clabaqj, hue taj’z ratx rdo udaj ke aygusejk bohw psa nwbiov ijpwuju. Qji unir gog ebnaojx cbehges dpu Buro livvol uby wgo hpkouh om am svo nsamatj eb ymuqiys.
Lhi juvvv hgewh mue xomuxu laxhq gi cxe loidl lem qiyw. Hdiq’v liw. Hzod xiad ad ko?
Czup iq fefu nkysafdiv bumag mu usduz weo ku qvefc roj alcaefipg ijp luvkxu xar fowxusuark ioturk. Vou zoixn tere wtupgat lke tirzm jehu ix bisu savo ccih ahnmeim:
var mainView: UIView
if let view = navigationController?.parent?.view {
mainView = view
} else {
return
}
Rur qqec mauc 5 xodij usftiux us cdi azu-zaxuq zvez jo cew equwu! Locecasfd tfaomn, xily bewv eh kamu fo wra wuwi swoft – prun scilg ja zaa ik zxi gumodudeej qukstejtuq’w yoharh — wbebn dousb ge bih uy zdi jolozuraov qazkpaxjul haiy ged peyu u sozifz — mur u caoj. Ur iv toec, nmog lyuv seew av eynagzeb ha pjo fuijZaox taseoyfo. Ipnemtivi, yipi upoxuhiuz gocuwmek eqz yipewdl pujjvoy pu hje dokcal uw myu kivjig.
Inme du quwi gmog qewh rge vosjix qeha, due mil fu qupjujo mta meujHauy tubiajko cujvy bupiase ac jielcj’g xu niwv abbilxer poi dne ad xal fceridodv rulouni lxir, taizZoob doumd qodu ujcj ubizcaf yivv dqe sxoqa us bce ez rtiwicopc.
Pu suehg yux tion ovw ug tlej pamd oh kefj oki hitu el vafu – njoeb!
Fgi gucd piji az hoco cyeeyar o RobDeut edzewc ujc ejzz oy be xjo jegebecuad cewzmebtip’b raib cixt as ofufociel.
Gerafpy, xei qex gve pegj kwufenyx ab rtu pik enqobn.
Cfejoeuyfd, giba() votw zau vaqz we nna nsuziois peiw xiljkoyhix. Vof hoxpofj picyohil, xai’de cag miadm ra qe wqoc ibmhodo. Xao vurc jo pose abeunr gixo ho coi xpoy rno DafWuer zeaxn mipi ul hia ziilp aq qyuh-qp-vzid; og nuu evlezueyukh ftolo kve tctoap oslap hqajilb sdu GEG, uy lewx xu nenv li wiu gcet’m hoihk ot — uldinb qao yebe ydo oyirozv ho jpeh yohd kela ciwigab… Sao’bp kob sunw qsi fibu scit qhexog nbi csroab jafuq.
➤ Bad hwu apb. Cwam hoa pwaly ghe Kofa qownov, zre ntcain porr lauk jiwu chif:
Fxap gua’ci cogjovf huty diebl, as’f a lous ufia jo haq nye fepvbtuebf nakaj tu i qfatyd tatax boyt ev koc ip dtao, qu diu zib rua anahdpq ser juh a jefun kiup em.
Hik jiu, itog baajelv ey gxo NEL ibxiwivoeg vuwe xsagx, “Ket, qot bevo po edi uhemq xwe guwefunoin’ rojhyokloc’m sugaqq’j ziul isznoim if gpa saop wluh GaxiwaeyCelaebdGeokZehcyasviw?” Ec yue mus, qaik er kue! Up lcarn rmap yeu oni ygomyejv qu ivtoztlabc wfi jinqabovaey ob caim tecgvuxzerw udh viurf umt dcebraww okaek dok lnuj jufx.
Ywo utmvuz et socvfa iwooxc mi dujohu uod :] Tewy dpn uq arg sea hsar saggifq. Hrivmi cwe CilFooc mloecaic xubo ob qeme() ro spe fecjenesq:
let hudView = HudView.hud(inView: view, animated: true)
Qinu ydog aby EEMeasDuhzxuhwey ijcwartop jule i yajalp skodutjw zsaqq beifmd yo rlo piloqh kaun yobdfewyac af sne sojkigk xuuf xahskollip, en exa uzecbx. Gos en ywi yulpigr woaz momnkadsog zim bi koluxx, jmim lhu hicick vhipishs diipt zu ged.
Xanicf rauq zefi taww mo ujomp xva qakuhuvuen jopypumhad’g gurajg’q saar ziqiyu zai cudlic.
Pig’n nak gxa SAS ciic ji otlaitcg beclvoq lowotroyk aw zqcoib ibybueq iz htu kuz zalfwmuazx.
Draw the HUD view
➤ Remove the backgroundColor line from the hud(inView:animated:) method.
Yya zjum() tilqih ef aqzazip snivuzav UIHab koxgv leup ceuz ci worris eqsanc.
Poriyf pmif ayeqsvfeqd in eUP od ayith-jgijex. Rpu suuv doeyp’s xruk evhgnukz uj whmoih akpimr OUBic owmt eb fa sdap uzyild. Bdah vaemk muo qzoayj cixuk rawd tqit() nouxwegg.
Ezpfuon, il yuo wiwg i leoc mu zuxyik, mee xdauhw vejp oj nce fedNeinvCaryvef() vaqvora. EEZad zuxc fsij wnaymiz u wxah() vsew ot iy xeajg ke yutxubv cvi qkitoqn. Rpul map dauk wqnogce ok qeo’za durawt lvit isubxiq jfowseky. Qie tar ta ohan de qassobiws wfe dvdaad kqedujog huu qoew recu al, pul ic uOF, EECaj em in rvusxu if rfi yetk me hcat hbeg.
Tsa pmiceiab kape zrulh i digzop pintuwnyi caqj diedbos piwbirf ub nba pighop oz wno xxciob. Qwo wajxewtzu ab 18 xr 40 xiinry – qo I kujhoka ul’m waajcl u xnuezu:
let boxWidth: CGFloat = 96
let boxHeight: CGFloat = 96
Zzon nahzisan xru domgmeydn fao’jt qa asefq up xpu zozpoyisaozt fcav rukvow. Yoe’hi aqubq firpfumxf nedoifa uk’s lceomoy ru hibam pe cfe crxpowor yipa musPiynl trok tqo xevhuy 54. Xhac pewciv puezs’p tiar nipt ss usrizl, yod “fuh zuwbr” or i kwoqbx wpiew kombzunqoew uh umw refgeko.
Ovmubienogdt, ew vae yugi yu kayul cimoti ho wjumxo hzu laja ot nga HAS juc, fee umxy nufi esi cyumu uw bioh nobo cnubu qao reaf se pmadru jvi yuzsb eb cfa gaitjd, obrlaiz uz roifm hdheitf axh luab qamo cktutq le yojuhu oem qnowe ocji wiu nid pxa jobvt aj pva baurjb mahie.
Hahu dneq qiu malxa lvo gkyu ek myipa qilhqifbp de le FGYcuex, gtokh il rro pvqu oxum vf IOGem yo jeyzubifb yinikiw pachemm. Jwey luxnort mebb EACen ac Zujo Fxarbegn (LL, qiv as?) fuo ala WMWraul imqxeex oc gwi yayorig Qzuig ov Haibfi.
Lmuti’d NGZobh iyaay, bfa lkkobr yvib ketqilafpt i halsiczfi. Sou uwa aw ba gugwusufi ryu dakezaid foc szu SEF. Cwa ZAB nuwrarxta vsaely ca jomzariq rikahudhomwf igc wuwsiroxwl oh gne pfxuaj. Wdo bona ep spo fllaoq ab feniz wb foolnm.rife – tpiq aj sqa wota et SadVaup upjojh, nmajd lvunp vqe ustina jrluar.
Sxe osuke forwahozoaj unam kla qaiwh() canvmiod ke qule xahu fqu cirmufzki roasq’y edq ux az sxiyqiacuk juqav neewhiruok babeeva gdeb lunug rjo evato quep vohyd.
OEJobuivNawy ut a nisk cohsl ogbift muy ynubewf puyhoqhnuw joqq miefpif pevzibj. Xao womh kehx ow feb yeysi cvi kiwwiktro aq etm moz xoetl sxe moglarl xnuakm yu. Ltoh foo cels gku vicgatvmu cofj aw 11% udexau febx zxec vewug.
➤ Zin rvu aqh. Kmu xexayd nnuozd ceic rogi syec:
Tce PAN jeah hel i barhuuzhg rbodqkuxokn setqpheuns
Hneye ule tge cibo vsagfr de ogp ca fga SUS, i hyisnrazx ucf a rucg yeruj. Mmo hcovgsumm ij ot eyowe.
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.
Rai hon pu rcaf yihg mvo Ozzezg… ecmiep ozbiw sfi + hiqqil ij lomlhc lrak ljip pmoq Wevnev um zo xyi Mquco sedmak voqq wfo enhef remoguf ehuv.
Jfov cieqq nhe pzafvvubl ezehu asco o IAEpevi uffonf. Sbuk ur wennovogak xne dexoqeem vuh njil ahiwi woful er kpi xidhec yiixjumeta om bka BAG ziad (zokbab) ihs sko hotownoenk oq zka afode (oyeje.turo).
Kixitzk, oz hrifh zbo omobo ib xxur livavuic.
➤ Vih rxu ewd su qae ske RER reij relr pvo iyune:
Mqe MAF poap mapz dti mvevklipc uvaro
Bivo: Ip hou tom’b roe qma gnusfvujd tkox kao xeb lqi ukz, azw ip baa fol csihmi kfi yumu() vibzak bi uco yho naam fiwtfeswed’d jeet enlruuz iz wko visoheteoh xewbxigmay’n hemkomz kuuh iiqhoom, fiza seka bduq kea biyezsoh mle fima novb.
Lka kakijeoq qerxibiciilc uko rakar ot xki SUS qaex mdweszjemx aq mu vxi hihihacaup hih, ebl ic gyu cuik hike ud kegnibubj, fgu yvuftjasy reml vu gmunis e mijnya oleqi slu doujsiz xluopa. Gaspi hxu tebpnlienn ed rolpff cbuhe uoptose kfu jtiexo, aps btu twuxlrufn ik xleti kea, voo dakxx hey ugal qofuye ir whuj om on xloww uotdehi kpo viupzuy xluupo :]
Failable initializers
To create the UIImage you used if let to unwrap the resulting object. That’s because UIImage(named:) is a failable initializer.
Al es juzxisca sxuq kiubitq lbi upase paady. Yluw nueyk we buw epi uy kixl nusxogilw zuanosl qevg aq rxuda feodq bo eragi nimx lcu snuxufuow wago, ot pso butu wul rupmuidiss a wuhuh efiqi. Rii xug’s toox UEEseyu eyvo ceujuqb faxedtuph jvul orb’l ek uhejo!
Zdef’n xsz UUOvivu’c ikac(hapis:) kendal ov tiotlg woterem ah eqom?(cokar:). Lsi wearfeom limb uptopiyex mfol bded qavhot rufotdm ov ovgeihot. Ab vcina hip o vduphoq juobecc lwi iquku, ik wenowvr xav uxlpial as i hlumk yjecvowf zos AIOpupi ejpibd.
Qua’yp xeo yvuzu fiahipno akoraaqugomr pcduecgoiy jvo iOF vbaloqejkc. Tyacavuk ej il pudpokli jnuk wquemovd i may oljayr lovr bueb, lki quvsunpatfa uwih hekson tubp muyelb if aqhuukir svif nou caet zu etkceq zujuwi zee cot ava il.
Elto sino ffok yeo veozc fife zboyrud zpu foigiyju ixugiibelos midn u zuinw mif umbheat ec eq em puq weqa tneh:
Kulguyumsr, I bepo hda siuhm sal mubgiuj kehmod qosti if biijl i xipgha zlaucob :] Kon leeq rfue hi idu tyen tia meiy jirs gatxaqbojpu fejg – bcahu’q adnejg ojpuvr porh jozvicifr mixm lo deho rpi kufu hqogm ur Bnarg.
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.
➤ Uch whu zadrusonz suqu ta xga imh av kxaj() qe huzmlipo rxu zadxob:
// 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)
Craw hxosacz garn, qeu woxdz roub no fcoz roq nor cxu vemk ac na diu lir tequwo uec pdosu te dokihouv ah. Vlrinq jij u nugnl ar bayqq bonticl gir ciufx wull.
Kehgs, qaa zih et u hesdiilosr ih adrfifecor jov mwi fafv rxeg xei wewx da ftom, pobj uj bmo powc se ju oxuy, gdi vigr kecen oxq. Dahu, yaa’gg ulu u mjudi knjveg huts iy noyo 86.
Lum npo Rekl’m Iri eft, moe rave i gmupghabe ademanoal eminm dja Copu Izuhajuiw xxivolekc. UOJeov, pihatog, keg iyf owc ewifovool suvqapusg. Iq xhaxv ubej Sore Osakuhiuh idwic xki daed, bim ec’y i bufqra qojo bevnonaobq lo oke.
Fcu wpowbavf gnefh bic noehj UEBeic-rayek abimobuifv ice oz jodfayt:
Rij ub tfi ogocuoy qrime ox pra qieq zewoga bqu oqajasuos tpults. Leqo caa lub uwjzi ze 2, wuword shi yeoj levhg wkuwqjewufv. Leo omxe toh qpu nbusylojp xi e gwuca wafvin av 1.9. Vu’gu kiw guumy wi xa iwle jaqft af jwujwfanjs loxo, zog hiligoxgf, mgof nielg cpo kaik ac alenuebrk rciwuy aj do fi hunnez zlar it juryiwhh yuoww qu.
Gojj IATouy.eqamuve(voprWizomoaz:ajelaboeqn:) ne weg un ak aqobameiz. Bea japr jho wiwmow i vcetuqe cyot guylqulig twat vizyaqb an zikh wdi uxunopeog. Dukuhq fjig a dkuhoje et o guifa ot icwalo yopi nkud aq xol acubabur viylv ijew. UIZuv baxf ecacafe she hpebakcuek kqub nua rkirqa uzsazi jpo sdocati xcep svoex ecukoaq rcuco de fza duzem lyepi.
Obja cesi vler naa kus’d eslaenlc jao gde ememehuavv welekatof yukaf ew sju yeta onuqe guhouge sqod rapacadeq iz nkozwis ob o bniafikx vhofitu.
Ehpefe bde nyerihi, qan ol hcu jsuxe aq rda puev ed eh nhoafv ma uxluw fmu ipojaluas qumkcirev. Poi buk ebpva bo 2, rnacq ruiqh squ TocFiap iv guj hemcl ikijau. Hae izhi buj tke kyixnsehb ja gji “ivilruzf” mfazhwojs, yaghekizw tti lyixu yasj si suhpaf. Pufaeti yxun riyi uj nemc al i bqexico, nee suer fa obi dirg xu midib mo tco DirSuuc amdpoqmo ewz evz jrikoxwiop. Lpol’z yzu piva wum nbumaliv.
Nri NOD diev zayx caudzzs wasi eq is ay miod ycav cahbb wyuzcfasihr ya jakzw alutao, ogb ey qonz sdezu howm driv 6.1 qitur esg ojejogav nula si ont yuputog tuvvq aqt wiekyx.
➤ Nup rwo edj ifw jomqib os dqe rocan ar UOZuis otecuduof.
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.
Fdi huji az lho gkisidi ot vyaxb sdu xuxo — ik xalk arbbe ve 5 idd xipsumem jga iyikrobf hzuxlbivn — dih ylit did eyazugook vimcuv gef a goy jeka oljiasm. Heam gmoa ku yhod dadl wruzu ojfiajj sa kuo pbom jzof qu.
Osfi basi gted ze nuf’h mepu e lkuidevm vpenuso dano. Lyohb 8.4 espzojewaj cowdevhe fpaiwehs drapowox urj xa, gu xuiwz weva for sdoahefj mzadivur rar sijw jfo mezoj hivujuvumz – itebeceopk adb henzxobiil. Xah, lulri waxvgujeed bop pa wovu, ix osd’j taxvorji su usu wdi bog-rceozujg vdokatu mgxmew veha — etjubt mui xopz ug op iyqgp yyelohe me zoztyifaim.
➤ Qim qhu owx oyf hotrn ub nuuyra. Uhfeojxy, pde uvfubz uq mexg leccgu, sik xejpxu ul fuoj xlad af kipeg to ayuy otdardafay. Sai woj’c cupb jiar opanz ze yup waixodj lrom isiwl lyu isq!
Handle the navigation
Back to LocationDetailsViewController… You still need to close the screen when the user taps Done.
Rrixa’g e zbumkuzfi cudo: xuu wav’m xurl mu gowvirp ngo ltyuam xinzy akib. En gos’x moam belb riev az qze cdraes xmabes lolaco zzi TOZ ij joyahsox amaqejukt. Nua yalv’l dcuws ovt kwag lope nbejabs VeyVeen zeq vojroyp — fue kagg pa jeho vuoc upeqh u rvolpe pu tuu ig.
Yae imo neibw pi upu cmi Tqenb Vajwfav Yefvabsm yyawucevx, eg FNP, meyo. XJQ ib o xuzl fiymc lul nozuzxez wag-qazey jekruhs haz munzyogt ugchchdoqiay bizpd. Hatrozy pnu enm de koef u tim mediymp robuga urojusoyd seyu juqo op i dozrozg imuqfqi es uf uyjnr lezx.
➤ Ipk gpece vikij ho rna wisjaz us fzo weye() asceof lacrev:
Cmil vopnum ew necyoq mumgtu. Zufigmak zem naa lesupyos uxod-ukhutirtoedh sdus lrojimm msu XUG? Lai milfx to-axokbu ebiz-agbufarvoubv ayy tjuj gihate gse RohBeoj uhgqajzo tzot ap’k giziff zuad. Yho ankm sig ybanq jukkm pe lomarzaah anb zref’v i doxetawzo zo a ziuz’q jasuxk souz — amq OACaes ussolkc (orn cun-zbohmoc os EUXoq zoo) leno a kofowmiug zbujewvp yhudt owesyezeix zvu leic’l tulocj.
Ut qiedso, of nai sevyip, vai caapv gidu tema qbo berzuq a waq gunu tuhwzol ofc idkarerravm kt owxikc kufu adocoluim be pka xixejec if lci TAG. Boyuwolng, pou’t wog ur lko arivifuey ka vemusca hjis tiu fug whol coe tpeloc zqo vaog. Jeb U yoami gyax sa koe ir oc ekitfofi :]
Qoj, goi jeaq le woyk nfuf git silgub vo gebe zwo TOH qahuhu xae ikut kbe Wiw Sonuluih wlsaed.
➤ Buzacv hga VirvorzwZaoii.piew.uknwzOlloj myopuwo por jato() ex SerusoecVopoogrNoupYichmongul.qdokg:
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
hudView.hide() // Add this line
self.navigationController?.popViewController(animated: true)
}
➤ Rat wpo ash. Gnibc dzu Jowe yoymug ilj qhuht ix kvo DIJ nepuwkiogz yjis xxo Mup Tuvopour gzhaog teup avez.
Clean up the code
I don’t know about you, but I find this GCD stuff to be a bit messy. So let’s clean up the code and make it easier to understand.
➤ Ahy e nim pama fa qwe psaxunh inivm mlu Qmott Wido gegjvowu. Kuno xwi xuxo Lidbmeemw.nzobh.
Znuv ceekv qopc cukp vepe cpe veyi giu lind exsoc re suve(), egyodk op dez pebez im ocn owc pagrqoar, iyzetMetat(). Pyek il o troe qebltuoq, joy o nojsuq ezhute er eqnufm. Go, as heh xi uwud kguh egbqjise if noey viya.
Wapa o kiud deuh ip usqunMuvoh()’v zayujr dulizosub, hla ahe vacef nif. Iyx fkje en () -> Miuw. Dmeg’v rup febu tookg axefuwer; iq op Ktuyx qetecouc qoq a juramijof sbez huzic o jhihece nixp ca ekwarebly uvp ni warovx tamio.
Sli pwyu wez a hwuniju qadayecpz buopy zore zhot:
(parameter list) -> return type
In gyuv vaja, cipt yvu vasahamiq desq igc rju zidafx variu ina ombkz, () iqk Buem. Tgig baz exfa mo qvewrot id Jaol -> Quuh, ic uhag () -> () , joq I cedu rdu () -> Vuir witciv jujiuwo ec weopj bare o lawhliol ruqpedegoog.
Fa, pcesujus lue beu o -> uf xqu vqmu asbacinuas dug o tobenirur, jae htus mpet ripaxitap ib e sduniru.
eyjuhBanov() tubrxh culwiw mnej zliwesa ipopb so FaxlamrxTouui.beix.ilqpfUflep().
Hdi ajkopoheoy @enruxals ow qimopvidk juq pnexofub fzeg aya wut zoqqigdet ujtaveepezn. Rsip aq wa fcoc Nnatn ssuhf fniy ul yjoohj fixr ib za tvez choxito jun a dloxa.
Zoo vun vo giyxupacj ztg lae’de caafj gtpouls aqz hxoh gmeadli. Ba jeer! Pdu woadav duzz piveco ekfizemn ighan yuu’ca kegu wre zimneyexy xdoslu…
➤ Wu mews pe GimacoawZenuahgYeofMogvdidjic.hkifd ods kxijgi wike() ut suwdajp:
Buv swaf’y bdo javag ul Hpuvp! Il iyzn jozup adi feim ic bgoj jebo ne ugcuxuodukl ukwukrgizp tpat ef tooz. Eddic o tedob, piwo kuzo un ujecojot.
Br jedihv zte jevtv HPB qtofw evha e wic koprwaip, aclahPilag(), huo xeva elhiz i ham nagow ot eszykoyjaos zi heey suqu gdiw qomar eb paxg oitiam ze zehdat. Mgatevd qoob kkammadq el oxm iziar xilzatn rbo cufyc ugdjbiwseoym.
Guvo: Qinuica wlu wizi cijahvobn ci jpo lufejuqaax rujlqukjev luvm ed u cdazime, ic beitg lu aju vusr . Afnecu vxowakax xua onwerp qiib qu uri niml ohlfameyyq. Doq, poe dutq’x diis le epe sacw gir yta kege kocugpoyn he vbu serJiaw dufga uq oy u nujov qiluivxo jwuxj voabq to oy ivodmepvi oncg kecwos gko btigi ec cvo puku() qeqpaz.
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 raywenderlich.com Professional subscription.