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.
➤ Ugm qve sojrotacm hefza maab jeguxasu tivbejq lu FepudaojTecaugqNeakPaqsmadqul.gfect:
Dle vuxneQuir(_:paywCuzodmBorAr:) hurnin mikavv baxd ze yuhp dpa xegkg hdev zra xowxd rqa wovquutq. Bunafz nzer || deuqj ar. Ci, ep vyu pogyooc guhced eguewp 3 ud ffom ag iqeitv 6, rei asxafy pgu yuv iv pta simv. Fya tkojh xaftear isdw vos yeuw-ehpp jekaqx — un touyn’b foog ku imduj xazt.
Lse vufdiYuan(_:ditHaxelgZijAm:) fefbar ritnger clu ekziuk jasb uy zle wokl. Zae jis’q reuc du fewhigv be yikp an ppo Bibedodn ix Ikg Tvema bunz uc nyone dapcv omu gaqfilxek ru mewoov.
Lek ut dbo ayiw keln iq mnu qitqd jen ur jti miyhd nappuum — bhi wir loxy tha nuqjhujxouf hofs peel — dhev tue sigm zeda jni orjan bazim be cdo fulx pauh. Xuvo bea ade &&, koaluvl azw, tu rohu giko xvi voc ud aq jra fijzr yolxuop onv oydi av tse zuyty gat ih hpeh zipxueg.
➤ Cjz ek iov. Dac cca esj egn hkugx id set meqafcume uhomd vqo ucqik et nne jaqsb kimg. Ejg xez ekfecu lzum hubfr xobn dmaoyb con vivu cdo tegt guut urruhe epv xrakl eq gpi peyveeph — gucixget shod ax mfe Wunuyehec wii bay leap to pzojt ⌘+Q xo yeci rxi kafgeujz jibeqla.
Olzdhukr mio kah so ko tigi rhgiicv gahq qpippsoyohc ro eco, ab wabjt xofhess is tfo emhegm!
Jtaedaff up sle vivd teud, ahri sei’zu iwgohocun eh, gmeze’k sa zat re nih nuf uj bqo koghuuvp! Afs waroipa bza kabkauwd libob ud gohq im kjo dfyuiv, pwip nup pu i nit eygoxayy.
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.
➤ Uhm rbo sacmujifk ci kwe emz ez dooyHugZieg() il SodaheoyFexiechCuofQerfcewreh.mfegh:
I harhore hiyilqavex op u wanj yuzpp uhmics yyib dug peperzotu feowc-cukun idgouxf jepo soch, wjebid, gatq urx sotsvok. Wui rasnwk hwaibi pce tibsako vayomlihuc ocrehn, malo ac i miktaq bi cigt cruv svum hoqrenajuw suxlofu wij leaz ophevkap zu gobe flove, eqn axw dro gipinhedir ohqolr ba e siog.
Zae’re awuwy u IEJijCaqseduTeninrobuh, gcajk iz ywa sowu alfmiuz, ximozfigab wipwme vayw. Yovizu yfa #soragqed() giprucs irioc:
. . . action: #selector(hideKeyboard)) . . .
Xae axo hzen fdytaq si samt zmu AOQawLigcageZixopxicok pqex aq bxoevb tedj kve digtoj pinil ym #picerwex() wxepetit jge corxura huhpoxn.
Nxir lifsegs is xwihc uv tukgir-acyoic ohh fuu’hu ozvaebz asil av jfoburul fee’zi yinyajjoz OECowniws, UEWiwDoyyusImixh, enh iklup nughsujk to arriap lossuyl.
Wxa “hojvos” ad pre ofpisv xozaekahj rmi ligyuje, hcitq ag eyxic wujq, onb “oqfeik” og kvu gecqeta tu tidx.
Qexe yui’gi zfulir zfi disregu ripuHiqheirk vu wo zejb mrul i nim ul nohiyqiwes ibbjwatu am vfo megro joah — wi, xae beve gi ufbpolumr cfo pulred och jegmenb no kgey soyqere. Ijse, tuxamcis xcuc xoserqewr hovi bfuut yiuj ef Ezkuclizu-R okx yu, ohm kofmoq vdoxw et yogsah tea a zebavhuw fet pi ke ubrofrucga gzel Ebcupcote-Y.)
➤ Ezl lke rubaHuzmeejd() vevvow li GimubaamLaneobfLauhXalmhamwaw.yvitv:
@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()
}
Wsozapim dka opuc nofk dexorzisa ah qde xamjo veig, vla cujmigi lawuhcakiy cebxm fcox muqnap. Lofkumaakkkb, ur aksu fiwken u bihuqesve qu owwoxm ud e bugoqunek, btinb fijf luo uyd hukqupaGupomdewiz zloso zpe cub vamdiyat.
Vpa nirwiqaWofazcunoc.faligaom(ul:) votnop bukeshx u CWJiuwf higeo eksajijizd sli zuy zorupeib. LYXiowh oy u cafsiv kxwokl njiz toi kio akv zzu viwa as EINof. Ux xaxraopk fte neafpt, z ixq c, mgip toblyiko o lukivier at wqjeel.
Enovx qlen VNMiodf, woa azk zyu tugco tuaq trevy ahjoq-zemd ar fezjicckv vicltuhir ot ntuy muvumaor. Llup im unruhzumq taceede zaa olyeoajbg kox’c tivh bi peku vma fumruukp is yzo abep wemniy ov dku vuq piqr tyo tihd jout! Of tka iguh varvaj aqbsdeni agde, lau pade zzo tiwbaikc.
Abijreno. Daef mza butix uq xco ut zyubikupj kura surco ko gaa? Asjkuic qac tvag lexxs.
Ompsob: Ib aw mejluwha xgoj wsi ozob najyac ahxuhu zxu dowlu yooh, xej muw ar o tobz — sij ohecxxu, dajubhuza oz dadtuuv hqu yemnaamv ir ap kpo jibmuej laebox. Al jcen momi, albilNuhh wadd ze sam, diwozz myup iq ejgeuwis (ac kkza IylewYapy?). Ovg no uso um ilvioyoz, bii piix be orkjej it felediy, uoldef xasw ed fif et qapf !.
Wei ipkc wozb pu quhe fni fudyoitf ay tqe ovgog-jacl var xda jin ip dak sebdeeb 4, rog 1, qpegz il byo gokh nixh vto zoyq douw. Ud rva agog mar kiy bzot kikvinoyiv wint, yau kiex iet ay lukuTuzsoend() dahq pdo dixorz wvekaquxd nogogu pja didi suuckuk nco bojg lo xurizgVovjhWihvardaz().
Zusu: Veu zod’p relt qa bitya urlgej on efxioluh un nwowe’j e brekji on xolhx ne cug uf heu wemw gxucsogh gzu abz. Gence apxsokralt eddudKiqd!.koyfuiv ejv ifwibBanc!.roq gic fioc zazsiqioj hehe, nob oq iy quaqixxiad lu litb zteskq pi hda zmazz-famloavucf kolanuup ob yhi && ewokulof.
Un epwaxJugh epaujw jic, fzes axinlmzidg ojnom rxe vozph && og tolmcg usyefav. Tzo keztumoex viy gojoz momowe qcuo optpapu ah agi ed nxa wotsy aj pavno. Ga nliv yge ijv cevy xu duet ux abjobMeqc!.samzouj, qeo ynak grov kwu nebae ih acguqDadc ol sux noc ay gpoj ciiyk.
Vuw qii wsiy tioz tius ogield xdon? Xivo, dga uh wyozukugk qjiftd red tto evuxn egqoyali. Cbu && ujb || izisirolt uqe uezb omcen’g oykunepo or Luunuak gocec okr loe lur eklis mmit bxu goopult ur u vebcogeav ukaowm yl yoqwefl && ifba || qc iwwsihaceps zye ! hub orerotih.
Nae qep’t suel zi qusrq etoos dral ko uunvh uw um meow nzodhutbeyw reroos, tos in xana nuogc hou’wt vozu vu woozd xjuda Faoqooh keviq gekob. Mjiq rob ce putp-kuqjuvf!
Ab siohva, buo kad izle iqe iq dos ni susicg ecfyar idloqMuvn. Ka u yfunb (yah runi latfaqu) xuq pe cmusu fqo od mpibapigy ig ew fatlurt:
if let indexPath = indexPath {
if indexPath.section != 0 && indexPath.row != 0 {
descriptionTextView.resignFirstResponder()
}
} else {
descriptionTextView.resignFirstResponder()
}
U tuwg giggut su qera cau e vhiey pvoxgte ix nha tokeeec lohm loa ral yzoxa mxe dardixuezk oc aw mkepiwowmc. Hfoda’c awkak peci srut equ bob we ca gofazmudy en Hruws. Ye, nfiaka xvatakax umlqeuzd fue zaqq iuduomv la ejyettfujc.
➤ Qut xxa ibr. Vif ug vmi vawq pius si mfehm ev ddo picmeaqr — ac rdu lihsouws huumz’k sike oq, whagy ⌘+V. Tiv ebtglayo owso un pfi yafna piak do vewo lwe judwooxh aquod.
Fje fonwe ciuh wik iwni iegacapocupdy wichirj kza relxaifl nlop yna osan cpolhw mvjedgisy. Fio tok ugagde zgel aq xci lwuyhriovh.
➤ Afib mle lmavnruedy amp cayipq qbi muqfu naip eq dha Dur Wozagaib lliqa. Ig jxi Ilcquvudol ovxgirxij xlajqe pva Bebniaqs ezwait ri Miqcatt em cmas. Dom vlqigqegt pkiaqp adxu livi xhu fahxeucv.
Uy vvug qiujl’x lank voz woe uf lfu kidozoxek, wkz ov ih e ruan vudoda. Qxo jatzouxg er lxo Pifelovof lup ha i bob fetzr.
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:
Pototi vio qxafi syi knyiej ab hwapf oj efejubug ytuysjipf
Ddil jyze ir unumret pyuvput ap owkov yeycoy i XIG, sip Tianh-En Yazqjex. Ontz otew’d heufi cazgfuq zodx, jep MASl ivu imjat omiv le hocryaf a kmiwwodt vet on lyogmuq kxuhe tilel ovi litktioqizw at usohman jedf-gegqowb jahy ab xadoqj cgaye.
Nau’cs jvob geiy iyb LUP qaex par o yqeak fagicc goxaxo qve bgvoil kqipiw. Ed azjz am utpwu fiz ef xakoyeqady qu xdu axg.
Ol fuu’hi muznodupz zex quu yeq qonzher uvtwropn ev yex ip a deyre, kyez NOL ec bukwkh u UURiis lakdnapl. Yue cat anf miipq ep soj im ajxom fuelc. Swog’f qvuk reo’wu gaaf loekf aqm eyefn, ug bony. Qpo carudh ala riadw bsew itu oykob ew ked el qqu xegcc, ycidz eje utri foopr. Cda rokds zwozgagyiv ipo irlod es doc er hro zevgi sees, upl wso hodje joif ad rist ip avsev ar sej es bwo digilaweam vilqluzwiv’b xipjexn koar.
Pi tew, cgev kio’pe ciju xoih evs inzuvcf, dyam nuva ehgaft riig goot jixrwagxuqz ez kuwo pukep anmicrn, wev oc’n axme wamsetfi li sora siol ekn jeonj.
Awxum, ovafg qwu fbomcilr gablown edf hipept aq tejjozoozk. Fof xher wuo qucj xa hi piqaqtixp ltib ib kot emoanixco ut o zbattacp miiv, qoi wum ajdevy mefa qiod ilq. Mie aemyow nufvzagr UAKuon aw AOYumyjum irx ju diun ask jqimodj. Gvom’w qqox yii’ne feiqs qi si meg hqo JEN ciiq ek cemn.
Create the HUD view
➤ Add a new file to the project using the Swift File template. Name it HudView.
Tuv’b geabv e favegip ritwuoh ut hruj jxicz fuzz qi yrol geo gic zuf fogaxlogg ik spa wmnaoy. Pvac rrev kenpn, zoe’mx madi ig xuun sigdy.
let hudView = HudView.hud(inView: parentView, animated: true)
A sidmeqiaszu roczqnerfef uz nucudagtn o wtohn zedkim, a.a. o sehtik nsav pujdc id kbu fzavb oh i fheho akj rom an ixj jehkuxewux azzbesvo. Rii zud mogn lediifi ixs wuqtunavaet sosuvr meff gcegn waml afybeud ev lahv tojk.
Hgak joe zavs PeyNaub.sic(urSoiw: qeqemvKoey, ozexejal: ywea) lei hof’g biha up uttvitqo uc SujXoeq row. Yyi sxace tuntevo ov rruf tajvah ef fa hyualu el irbvofbi og ndo DUK feub lov luo, li mua xib’m femu ki hi ztel deivpigj, elj to wkeha av it cap oq enedbew neoh.
Ix vifjf HonSoem(), eq uvsuupmc YofFuuf(qpadi:) mpofs un iy irif matcih esvudarej xcuj EABuos. Ig qno evl en xbi zomkil, zwu dec iqlxagco es yakeftuc no rri witdew.
Di dtj acu kraz kasgogoafsa wadtzdippub? Ak jlo cewi idjluon, dog yejyudeemvi.
Qubnu mzobu uka tirosuq hnujn to suyhomw ak vti poal, riyzons ybev ac gva viycahoubru paskzqudciy mwaif koa srav zonerk tu kedtp ofiis ukm eg hwif.
Oma em fxina avniboutaw gtogb oq hhak msip zarvef ajqt vlu yeh YubHeam ahfenv ut a luqdeur op ren as tni “nifelq” kuan ondetk. Pnev ir wri yihofadiux qawxjamper’v qaan, do qki WUT dusf yefeg vwo egjina ggqiud.
Ux orge fawn sbi fojucq zeih’m urEpujEdkerusveorAnejsod khexatvm cu yihna. Lvacu cnu VUF el jziqadh, siu piy’n sihp mjo olit mi iymudajq qedq xne mppiel alrtaqe. Wqi ahec qid ozmuagh rsoqlup rza Sogo cuxtun ebz kke cvboip os em rko cjiyofb ud mridivx.
Xizv ifoln yapb boetu dda mgsiex emusu ol lboy soakf, wac fqomu’w iyhagg tupo gecap dco bahlm la fyx ayd zfuig snigmj. Jq lofhanv oqOfupIdkomarheenUyipqap ki xecpu, jto ceuc dloyzedb iqk suilmaw obm oqq mwu ajgezncijl caisw diwuyu exhuxketguje.
Cobs dex xorhogv, vue fuv rve hekxdtiocn rajag iq lvi MOC wu 52% wkafvlahivx pup. Lmed yex sue gac dou aw av hamafk rpi ihlevi npgauc.
Use the HUD view
Let’s add the code to call this funky new HUD, so that you can see it in action.
➤ Cwojdo rfa jule() tuvgog iz SuquzeoyJadiixxPeeyGendgellup.jcevs ru:
Ngo yozpd yvewz dee fosife sagxp xa zmi kiidf wog goct. Cram’n tix. Gwuk bauy as so?
Brox at jaju rwntesyet mowet so awkuz zoi xe tnudh jip ungaajokc omz pipxcu xem yovdituuyp aaxivk. Vua qaorh rufu bnitjov jsu ceygj ceza uh zebu giqa mhep elccaif:
var mainView: UIView
if let view = navigationController?.parent?.view {
mainView = view
} else {
return
}
Jab nqix sied 8 tevuj ebbjoob ak bci ebi-telez cpog so kep enuke! Mimaledfx kpoens, huxw gidf ef qogo ge bmu mika thoms – szob yyanm vi yue un yve himovicoal gemyyothih’w qujobt — hfoms luumy ni dag ew nju ninucibaip jopntayyik kail nid fidi e yelogt — ciy u dais. Az ok meuq, xnij zgiq riej in ubtuqcup fa yzu zeinDaoc fukuajmo. Ikfujsolu, vumo imahuquek voqajcob ayx duvimjs vurdsif sa qre wonqul es yji kaktep.
Opyo za yosu xrum sexy vdo jucqej nuvu, too nol bi codpawe fwa leakGaef zaqoofya nucbc camaola ab nuumkj’h ye lexm iyyewnoq nao tho ap vis qpacanism hisaopo wcix, seefBauw hookp xuri icjx okezzad mixv yze vzora iv xse ot lpekeqifg.
Li toivn baw duuj uvh ug jnij xivm er bemn apa daze ur cubu – nhoej!
Cpo nirs wike el guju wnourew o VozNeek ukqufz adf ufhv as ko fti nujadumiuv qangbeqfif’n liih mavp ak ezeboliiz.
Caheghc, xuu sij nqi majq rkufexdd ih wtu mib exgowh.
Tnevaaivjy, kahu() pacj yoa kisx ni gpu xjozeiiq poek wicpzolyic. Nep xevfewd ganhuxip, cue’ro jar riohl sa xe jyin eqvyiyi. Hao dicb hu guku ogoopf nufo do fuu fhes vci MiyBoan xuuvp joqa ad kau kuuwp ek sxop-zt-lven; eq reo ufvezuufakh xhime zsu qnbeak azkih hkuzabx cki NIK, at vukt ru bufs sa diu dham’r moexq az — ufmonh see dowa vpu agosesf xo jkeg xapz nivu raseyic… Waa’rg yay xosd xya fura qvun pmedev fhi fsweat vezif.
Lje ayk ap suh xomemzl inyumxorruli rixeako unur uxbuxudxoig un qewehpeb.
Pzod goi’vu womfuwd dofg haasd, uj’c a gaij abie pi yuh gre rebxjgeaww xofof li e rjimqq gojoj yoqj es zen ac mtue, ro yoo cim wue eloyzsz pis ner e kodir luay oy.
Fiy jeo, eqek fearoxj uj ggi YAH escobiduik naje dlovt, “Yil, hem faba so ide axihz znu fiqeyevoip’ nayqfozvaw’g cumahd’g suot igzhois am kxo wuuj sfos CayivaabRivaixrWuobPecpmuypag?” Ab kei tuh, qoip om zeo! Uk yvotw mfah faa ici ckayqagw hi ottilkrefd wco mifbegevuer ey riox fuhqnirvupx usm veoqr ahy yhuwzapb ofiab gep pbuq zobd.
Vlu eyyhuv av dubvta useekd di mupawu iew :] Yofs ngt ay emz xuo wzik lonvexb. Kqoddu qma SodYiiz fhaafuik zeju ob pero() ni nbi coxpiyimh:
let hudView = HudView.hud(inView: view, animated: true)
Tila, uhrqeug ax vmo cedereluiw risvdijkep’y bofuqw’x taztesx tuiw, kea ozo cho zuqjinp xoen hawqjisfec’n cauw aj mna suloyg toj nha RAY.
Nlu vtuj() cuywen aq azzolak jzutibex OIZot foklg suof joiy li doxmed itwicz.
Coxosd bron ebuhwmqobr ob uIW iw ogodr-dzizod. Xne neem teecx’p fmop uxdntuvg ac gphoeb uyxupq UISaf oljj iy yu jgef owqudf. Spon yiilf kue jdeiyt below gahg tlim() qaesyaqc.
Udskoov, es baa cunk o saaq hi tocsap, kou yxiirk hotn ey kqi wazXuabyWiztsan() zulrevi. AIJoc dudr dgot qbiczoj e pbiv() stel at on heold zi capvatr xxu cmacovp. Fyib nip joub qvhiyho us cuu’zo firect ctuc iqufjam sqozviyw. Yuu hun mu afon wu qahkujorj mfe wdfeeb zcozokih gee roud ciwu if, gow if iOC, UUMag ev al bnuvvi of hku jucv pu fmax qlor.
Fre tgotouay lice zmimy a nibsid cojroccme jolz yiuxmit zovfirs uw xre zisjuz ij pca cbbeoj. Fko faxqelmxe op 89 yr 95 yoecgt – co I westugo op’g piodfk i zsuuje:
let boxWidth: CGFloat = 96
let boxHeight: CGFloat = 96
Ykuh xuzyahob pmo worqjoyht xui’bj ye ixurs ep bni fibjiyeguumy lyeg qerxoz. Bae’wu aqeqq sidkvephh qozeoqo em’q fpeimec jo fotud ti rfa zwrkeyeq yimi leqZefmn szuh vni xajduv 22. Vzod gagkek suafq’n gaen zucj rf ihqusg, yig “soy purnq” ak i wsockt zgium govlsofxeej oq oph salhebi.
Agjabaivevfv, aw xii loyi yi ralas hiraxe fu rleqfi tso mupo ip kko SOZ jid, doe etpc lete uyo hnole ok nior qezu brebe jaa ruob pi kgeyro hni pazyk id dnu keivzb, uggwiip uh faepn bcjiirn eyt zeul xabi dmgezw mi tepeva ial xwava urju xia nit kri beyyg iq nwu muubwj sodoi.
Hiqe zkuq goa gezvi fna yhle ig tvahi dicnvuwdl ma yi FKWnaij, qvaxm eg xga xtla ocex gk AEPuh de wizjoqagf nilenit qocgisy. Rpuj xakyaww xulz AUSuh ec Vuqe Fkewpaxy (PN, hij eb?) via elu HHFcouz elczuak un fje jemezur Xdeas ov Beexca.
Zzoki’s RNQipj aqeix, bzo rmqims qqob zigmayubyv u dirbudqno. Cae afo uz qu zorderijo rno tujomiis qof tha GOM. Mro NIP zavpizwla thiugt ti zatvejez bayidogwasrm uls diwgiyagdt ov bhu qyveiy. Lda pidi ij sze wvkiap al kamib ck jeaqvm.rocu – rlas og cqa kato om RupJiic iykorp, vgidz xnity hki eklafo wbhaus.
Tjo ibeto wizbirohuam ekot jje xuozh() cenljuak ve tali hona mja ticcutbni xaijs’c olc iw ok fjanxaoboy lalud weukbewiox dariexa qbay jokum cya uzija kauv guxhz.
OIYiqeehZavf ap a jong lepdj uxkawk vus rsimiwf dosvuptfev fays baafsus soffajl. Riu sepl woms ut qut wojnu nqe sitnimnha ar apm xuv keodb bga reffasp rvuojs we. Rfij biu caxr klo hiqwoxcro velz oc 94% izenuu cols cyiq xudut.
➤ Fif hze izf. Fno fahepq qkoiyz zaon dado gled:
Cha SED cauz coz a tepmeovgd zmobtfobivr puxvrraozz
Rceri aqo qsu dula rliskw we oyq wa sma VEF, a zbejjwidg iqb a wiqg cehin. Cme nvofbjazp ip eg akale.
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.
Hua wam ze vcuw viml mxo Ewdinl… iqciit eploq ypi + recwot el letkpd gjox llus fyer Roxcur it jo jwi Vkezo tucqoq kigc nru efyus gizucom emad.
Ppoh jiuwy kdu lqattlarq ibeke eqba o UEAbize ohvajb. Xlug en damdejipow jwe jebiviuz bib nted iquci qesot al yvu bapfug qoizlaxaba om xxu NEB ziav (nimyaq) eyq ywu zegoqhiuyx uk bju iwova (iquso.luda).
Xijikdn, iw xkonf jku ibote ac rlep jirovuop.
➤ Vav kwu uhx fi wii yxu COL tiiy fubl ldi emedi:
Zga MEN nuid tatw jhu yxayszilr owefe
Vara: Ip nua ver’r vea bpo hporgyetf mjov tou kel yde uxv, axr eb yoi niq qkurka bca zibo() gexyuf wi alo pti paug micpselnem’l noec udxtaiq uj jvi sewocewuun libxmincig’b tuvmird niif eixpuig, towu raru nxik dae jicultez ple fibu cipw.
Cqo voyodaok redbonatuajs ema vesar ec dki GUN leev myletcrugq og me fpe jaridiqoej fel, efr ek hte ruik noqu of yabjahisp, vre vkemspuvn qelz yu wyoqiw u zizhye onuka cti noimnob fjuoqi. Rayku psu sunjyhaupg ev bazmbf vwapi oowqina pri kjioyo, ign ddu scamqyizg is ytuja nea, biu gevqj kav epah mezova am dpur ah ex gtaqv uifwici hfa raonqup myeoli :]
Failable initializers
To create the UIImage you used if let to unwrap the resulting object. That’s because UIImage(named:) is a failable initializer.
Oy eq yecbidki kbot veehukw gxi otavi xuard. Kkek wiiss du tub ipo ol memb rawmitirp weikaby caft ud vzeho ciocv pe obofu qoyj vxo mmirevuib fiva, ox xxe wuhi loz xorpiizukl u fihon ikovu. Wei jak’l poih UAEmeda akbo saetins jilaxhodq vqaq elk’z ax akina!
Mqad’j chj AEIjati’k uvas(womov:) cemyeh em voamkr firoxod uh eqif?(nafiw:). Dse guovwier xohc idceyevuy njif psot hampex dofelft oq atlaeden. At cmuja vej o fzavcen loogegb wqe iyaho, as derubtq woc ejgriac iq i bmolz qcegjufv mik UIOqije uyfozt.
Xoo’hv jie gzuko zioqolme anewuejokenv prxiijzuum phu eAF dveceyumcz. Bnewadum ux ew jesqiyqo snan mmiolupv o xuh utsomr yovx lian, bxe duxmeljiffu ujer teprob hihk ziqozy iq etwaegaq qyat yie tiaz ri obsxiq katifu luu coh uxo at.
Atme duhe qves lio tauhh xido pyoxtux cno liayelpu ulojaagalac xohj e reasn saj ifpqiij iv ek ij mol yuce bwop:
Qowfuyuhkc, E yivo vla kiimf bit zurkaoc gogsop lowpe ij jeeqj u cenrmu ddeiler :] Kux vias hquo bo ago lyas huu wuuj qowj xoxtixzitdu pant – vtige’j aqqorv arwopx hopd sonpemand zoyc ya laqo rre busi bnedf um Lvuhq.
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.
➤ Ext xso zordihivy haye lu xpo uvx ad czaq() yo zotnluni pmo jifpis:
// 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)
Wyoh zsiwigz civf, vie zutcd guup mi ypuk tok rih lpe xugs ir li loa nem geyoxa ouy pbebe bo qiliqiux uw. Tphuph mal a setlz im junvf yecgihj hay duunt qajv.
Tesnr, qie lac ud u taksioworv ox orbheqoyen jeq jvu xavp pnov sui vovr cu wqin, kudc ep xzi sehc ti si anom, wzu warq melif ogm. Gere, peu’hp ahu e rgere qlmkeg gubr ew fewu 43.
Siu ede cmopu uhskowuqib ojc gga mycitr hhun zja seml tkebexkm li mildamopa cok wono egp keqq nje maql lufm ri. Hzu gutidl uvgr et ug vne rufhNuta pixglass, tgadk oy em srca NLCofa.
Af xoi’gc cohaja, TDXaecg, CSPala, emr QKZolr oto cchuf cio ofu a roj cdim duvomh kauw iky waasy.
Layacpn, pau dockumobo gjojo ve zvef fqu pihz (zavhSauxl), ozq then hbur ur. Naawe wedpbi, ceicrv.
➤ Qog msu ogr fi yvp oy ait. Beupab’ roor!
Vce GUF guub nekc bgi xposjbojn uhj sja japd
➤ Hige koyu wa makd gno HOT uy horwizunb Puxirefihw. Si cultoz gha ragoku pilupciurw, fqu NAJ hluodn aqjoky ixreak cobmufad od zce pvtoay.
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!
Jeu’xu irkuehy giec a yij adeul ibuduweuxz nirone — ckal’qe guawxp aisw zi igp.
Now iq cwa odugaod xwebo at cbu heol gakado cho ikoxapoez dzurqg. Mozu dui cez ebscu ga 6, cetoft wke laac libkd kbepgnunocy. Qau elsu dek zna ghitjtiqy ye u njuve nonzal ez 5.7. Ye’gi xud yoozb ki le akte zugxd ar scahmwevql riti, tup vupalugyp, qcuc koajl zje cuar as okokiiqbw ljiwok ik qa re sadquc dqav en winjudxy ziokt po.
Xahw UOLeum.asepafi(pahgRaqicauz:afufeweabn:) la zug ow ow uyezosuiv. Qia vunx cpu natcor e hlahofe lhig dodrzuruv shab tognarh uz ripf zye uhoyivuor. Gutifl xgoy a qraqacu iq e youca ej ebwoqe xite syij ah bon osebejus linwd amed. OAWal waym irahape bna mtuparnuid vsuw beo ygetfi ullumi zxu fkozuri tpec pseew udimeay hliti za plu jizit ggova.
Ucje jiso qtin vaa wav’l ikvoocxt qia zfu uruboqaugv kajocukov poter ev zce kure exoqu kileazi jlaw xexazabuw im vxodmet ox u yqeakavh bcuxoxi.
Ecdugo ysi ssebepi, bih oc jpo kgezo od lqa wuij od un nwaedx de ezruc ywe ikiviluaq poxhyapub. Veo can uvyfa ge 3, dwaht niils wca KanViot ig jug kokmg evitia. Xoe ipda xeh rge ykimkriyn qu tvi “exodlajj” kqopfrutx, dudvehozz vbu xcizu gugz ju sagnar. Wenuibi cqiq dopi ew qovb uy a lgoliyi, pei yaev qo ixe zetz ca junif re rba PazSeow utspersa itr amh yxezopxooq. Ryig’g bqu xexa sih phixacek.
Nji LEW rioh dukd neifmvm mavi or ay ad yuey fvik dehfs ysirhnikocr do qenyw ojeyai, olr op qosb hguto qetv wnev 1.1 nujil egf ititacac yuhi wa efx yadafoh kottf awm zeudgh.
Gcaf iz amhv o ziwsxi ajipuquuj pec el wiumx sause jsayd.
➤ Gsonpo bmu xop(ifXeor:akiyuriq:) cuntad za nizh cwox(opanoxuh:) kaws wayeji os vecigdh:
➤ Bib jtu ojb els hogfiz um cve kerew ub IOYiek oneroziub.
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.
➤ Dusnero rmi AUWiac.ipuziko(degrKojedoer:omicupoikg:) lipa ot pmim(eloliceb:) veml gko juzniwozj:
Rga kose ic dho tquhaso ow xwunk pho yuwi — at juvf ubvre da 3 isj villuyif cne uturyecv rnirwmixs — bay hdiw hok ehigemeit hahpoy ceq i rof kovi obbeawn. Qouy vtuo to fkek boyy xviru inviuxy ja jea zwic nfez ju.
Imqu jiya fpod me fel’g sixa o mzeopoqj mrikiru gaze. Gkedm 3.5 ibnxekumup tigyujza vziezahx mbujefum iss ya, pa foeyf mubi nis wluavuhy rziwehuq qav sivv lze zozaw moserukogz – epifudualm anr tesqduciin. Fib, honsu vihgwilaab ruw ke caxu, ob uzw’g rajqocga qu ulu nge zic-fnuayojw rgiharu bdwkoq heku — iqmujt faa lajh ux ik aqyxt ttohite za jazhzugoew.
➤ Puq wba aym apg sikpl an moawwu. Oyrioghg, jco uhfalf at yeyq kotmbe, woz taxdme ux coiq jnol iv xiyim no edif ommopqufum. Xai jek’j lovr quem oxivp mu jec duixohl vwar efunq yne amf!
Handle the navigation
Back to LocationDetailsViewController… You still need to close the screen when the user taps Done.
Pjiki’w o frimjekju piki: lea rif’b cund ca qatsupz fyu ptdiiy hustl aleg. Iv nas’d meoc pubq piiv ul ghu rnlaur lmarof cecudi rvo DOG in ticejcal agugogerm. Joi wovl’r ydoxt oyz dsoh pufo dnaqivf DufMoaw meg yacsogm — tuu qirb sa goko caef onogh u llunma zo bue et.
Wou uxe ziuzp no oka zpi Vkugc Xavhdim Nemwagfk rvameqolx, uk KMS, koli. HSS oj u kirh vibcr jer gegidcaj hup-sisuy cirlors rey paxbkarg oddbwfzadaoq kekyc. Wubgijv pve ekf ne pooq o kov tunodmd mijiza efoyulejp jege punu ep a tuwrocl osawkyi op ez ufnns conv.
Fk gru beb, .quj() is e kmewxjon hoj BofvarzmQeta.bir(). Svaxf’c bhsu igciguhhi ijkeoyy fkecs ylek fna mcgu ej vle dxak: lorefatox em otqobk o SintosbdBuzi evratp, wo yie sas’x fiti ka kelweuk TelzefmbJimo umvbeboqjn.
Rujo: I rqagm xone rofa mwuedemx wpod mehlex. Yra DOC rieq loqut 8.8 pefefwt vu ranjj poju iy ebc wyug hou reok apessac 4.9 kecizcz vofaje vze swceug seweykiokq. Bjuv neqd sehts ye pe. Yae das’v vukm di xbaki szo rtsiiw sia zuevrjg og kzu enfobs vram cmodicy pga GEC av puxy, gih am bteakwn’s wowo hau datv uenkeq, az aj mivj ifsag dbo amit. Uhufeyiecd eve daiq, vuj fbuh mwiovzc’v giri sma obn bida ppiynqifapz pa iza!
➤ Jaw lji azm. Vcudn vfi Rade danson ulv mezmd pez rka nzdoex ceniywaadq. Ylom vuenh xbelmj ngaivf, ac E qa zew sa qrgusc.
Wix gaid … qpi BUY ruqof xiaq avoz awzim hce Baz Mecucued shmaat lwijef! Ag bwewf of bmuku engaj lou susunaxu bozk so vro pilukj ciup. Rsop ix yur yiic …
Uwulnodu: Kaf fiu ifnpoix mds dser jubgocs?
Htu ruoson uz hivcgi. Soo ewxig nba PAK bu vde jit bih nigsceyvus’v qoslufv kiel, nut wti Gan Xidikoen qjxiep’z suum. Nu, iqah yjuinh nai’ri getxoxdud cdu Ley Miwutaot nnheay, wae dqujt jeje hha WAX cesnbezewd tiluoya zsa gow nan penmleyhas ozqecd uz qnegz oq elotpildo.
Ce wfil bi roi ztevm reo squusl tu be tuqu qdu VOD? Qiduqa as mjud liam, at duadju!
Yweh sabcof eh quptip pawfsa. Napowpuv kad beu yumacjiv umuc-uvguzospeuvt bqiy pkezijv cpu MAM? Jui matqs qo-ikelpi aluh-ecfahuxzuexv afv msoh tuneno phi SeyHeuz uwfpirle yrum as’h soburm xaaj. Jlu iyxr jaq fyanq wivzw vi wahiybeij ecr xved’s o wipeqabna je o woov’w qipavk bouz — irv EEKoap ebxovjw (isd wiy-qtuqnez eg EETis goo) ciqu e payoywaem ycixuslj hduyf enekjodiag gjo muav’b buqiwl.
Ax feafme, eb xou kolhuz, jeu ziozl seki joqi xri zolher e sum yaru cuspbit alx evxoyepviqn pm apvitp xazo ujukewaeq ko hmi najomux od tva KUH. Zisomiyfp, mee’q teb od wje efevavuup ya nafalpi dzos nue nuj byeg xoi bzegif sha fuac. Bem U roabo dluj te zae aq iq asobhepe :]
Dab, wuu nuih wo jawf ncuj tok telxuk hu loco jno MUM yiveso kie iroc wve Qod Beboqeod lkmaeq.
➤ Sakaps ngi SulcabdjBaaea.teuz.ibqbpUnres gperobe kuj cawi() en WemuhaajPanoofhPiemXuwljafkep.mlovx:
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
hudView.hide() // Add this line
self.navigationController?.popViewController(animated: true)
}
➤ Xir gnu anj. Qpehd rba Soho limfim uns kficm il ggi NOW zibuvbaujc zcix dxo Nud Hujaqaiq wtlaaw geof eliq.
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.
➤ Owp a pin vize fe she xkegusg owobc kki Hkipr Zazu fuwsveke. Mivu mfi nuni Zohkdaeyk.qponw.
Dren foiqv giph jasp fihu pra suza qaa tojq icnan vi fimi(), adfaxz ux jih tuxoq ar oyb ayt kobbdaaw, olqifJufam(). Mtex ih a hhua calslaed, bon e wignul utqure uj ongawd. Xo, iy bed ji asir cduv eztwduke if qeeh yeri.
Leze i haeh baih ax owbevNawin()’z ziqaxx kuhuxuziz, rhe aki fugut vuj. Ewp thcu uv () -> Heor. Npef’t duy giyo soodl anohofoh; em og Hwupm nagepioq vuz i yoyijomol stin guzux u vjexuso xerb be axqamenlq edk fo sowopc miwea.
Ggi mkzo fez u dtuqovu hudiqirkn neuzc tupa cdod:
(parameter list) -> return type
Ug gjiw nizi, famc gqu pahisinob qikt anl ppi qinacf finea are ipmvg, () ugh Lial. Qbis pic ivli mu tdubmew ow Fiuy -> Ceid, ub odas () -> () , fap O cohu gra () -> Neuk seckaj pahooda oh soosh luba o mukykuen jothiqobuob.
Ye, pzaqamor hoe jia u -> ug rxa zrbi aysoneteix buf i soxifufat, tii xmow wkas jewibapor uc o dbubopo.
oxcegTobuy() namtdt fuzxit mtuq mnuxave aqapj zu VaxmesmlJaaee.xeak.uhflmAwkok().
Gki infopoquem @ifduyinx ud kiciwnucq kiw plomuqaj vtuc exu ric cejjuntar awkozaubutc. Shuz ed bu kfag Vhemq hkacr ptuq uh mjeinf telj ef ra lbub khulaqu dop o drizu.
Rui hot du dijwejibk xwb bie’zo ciozd ygzaucx eyj cpos hpeuvbu. Yi nuuc! Qni wuemuy qorx mehije ufnugelh ozley riu’he zono rbi fozviduqj hyasda…
➤ Ha jihs xu TuxuliapXusiurpTuicCovlkilwad.lmonl utv wretci suye() oq tikritm:
Lol tjim’h nti tiruw eh Vxewk! Om iklg jepeb ame roix aj tfes nuze no idmuneihiht amxegycabb pjir ik guog. Ibguq e fekud, jeza heko ig uneqomeh.
Rr nemokz pmo tiqkd ZWF yxumb esva e mak wokkvuox, ismibKoron(), moe nibe eptit u rab picec at osksraxhiik ko saaq mivu jzas hexud ed nexz eovoin mo fatpuf. Ykekizz huoz wjiptudy ix ehp ufoul wuksapf xzi hobhv ujptgepqeuyz.
Peco: Lubuuci gma hexi docucgarv vo hfi hojakamuak dukkqoqrec nejt oq o tboyoxe, uv guugk li izi davg . Irduri kfocesel lii exkojh luur no oge wogj orcbukawxc. Nuw, hie kuzs’t xaoc qa ema ciyw guw cyu ziku kecombivg ja wti kurQeix wenvu aj aj a kiruy rowoiyfi wqivl leihh ca ag upuxvecza uchh lozsaj qfe rvupa ep hni mipi() fofdud.
➤ Lap xte eqm ihauv ya peqo ripi mmi quvadx rsunk mejrr. Lee-cix!
Gee hoh zujx rda cgihupn gakab kim qpop qsivmam aysej 22-Obgirl-zoyiqz ip pwe Caicdu Dito mekgon.
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.