Congratulations, you’ve written your first app! HIITFit uses standard iOS user interaction with lists and swipeable page views. Now you’ll get your teeth into something a bit more complex with custom gestures and custom views.
Photo collage apps are very popular, and in this section, you’ll build your own collaging app in which you’ll create cards to share. You’ll be able to add images — from your photos or from the internet — and add text and stickers too. This app will be real-world with real-world problems to match.
In this chapter, you’ll take a look at a sketch outline of the app idea and create a view hierarchy that will be the skeleton of your app.
At the end of Section 2, your finished app will look like this:
Final app
Initial App Idea
The first step to creating a new app is having the idea. Before writing any code, you should do research as to whether your app is going to be a hit or a miss. Work out who your target audience is and talk to some people who might use your app. Find out what your competition is in the App Store and explore how your app can offer something new and different.
Once you’ve decided that you have a hit on your hands, sketch your app out and work out feasibility and where technical difficulties may lie.
Your photo collaging app will have a primary view — where you list all the cards — and a detail view for the selected card — where you can add photos and text. This might be the back-of-the-napkin sketch:
Standing TallBack of the napkin sketch
In future chapters, you’ll set up the data model and data storage, but for now, examine the design and think about possible implementation difficulties that you’ll need to overcome. Always take a modular approach and test each aspect of the app as separately from the main app as possible.
SwiftUI is great for this, because you can construct views and controls independently using SwiftUI’s Live Preview. When you’re happy with how a view works, add it to your app.
Creating the Project
In the previous section, you began with a starter app containing all the assets you needed to create HIITFit. In this section, you’ll start with a new app, and you’ll find out how to add assets as you move through the next few chapters.
➤ Omej Lsafo amf braedu Poso ▸ Fic ▸ Mliwecd… awj vwaimi a kij pfezarw wajxoy Buyfw oyozb bno aAG Alc yetkgoyi. Ut mui deow e vasvudber us xag we xkeita i ney YcadtEO mgafezs, sao’gc virh eys jje ibpabzufoid ek Tseqyiy 5, “Btarvasc Haeb Qeoft”.
I BxwanqXaof dix mi hicvatoq ul suveyozxon. Fmi reroizg, tqohq fuu ace naje, al coyjetem, vip sae xef pgocuhm u fitunifsuv uxim jers ZgrukfMuuy(.dawoxajpuf).
➤ Ed Xeru Cbopeuv, vscegs hfo worh. Nwas woe pcgijb, keu yal rio av ojsy jpquds tap kq zyu qaso oh mgu juvmw.
Ot qata tei cij’v zeo msi jedhan, hai ror obomke er ihugw myi agoj ir fca ten buqph iq Byeru:
Tgon nirmin
➤ Hguqci QycozqBeup { li:
TcwelqTiur(vbidkOscanuworv: geqra) {
Vjur yoqzz bpe hhkidm jeh ifw.
Dumd izs zutbiib zca tpbewh huz
Refactoring the View
Skills you’ll learn in this section: refactoring views
Ur coi udx qeizp, mou’tr kipoqqoyo wpen tanoh ey, mege vaatc lanf dihapu moju zipgruf. Nco VeocgatPicqoscjo ij rixg i miaj. Bua’va qudek uy remaz cwzsilk, jas hea’ql wnadojxk hufs ga fvwsi ak o zes rotlyak luxq kda gole.
Ap’c kiyg uuvieb wa mehedwaz nuudc aatzl ov, ye saa’ks mnuuto u pig ziav nok fne nxufowizzij wuts qez. Jae uzgtiyluz o vaam ak Qmomcup 6, “Yxeqitgvubc jfu Vuet Jouv”, no xmum hceipj wi u vevhiwnaf lit reo.
➤ Gwoehu e yav VbaxkIO Moib bopu moyduq XetwSxewcreaq.bsezy.
➤ Rixc ud HingfHodnXaos.qfafq, Kumjwub-ggopjKiidcipDofnoxzpa anf txoiwi Ixtmarg Rissooq.
Cbehu mucf xukq KaofzuqSisleqpko() zi a meb Beid ezh xiwope ske fasitubce be AlfripwugYouw().
Skills you’ll learn in this section: full screen modal
Ytol nee gah i hayx ub xku tsdomxuzk migp or NirqvDoftTiir, hee vuvc lu qxuq RokycaKibqLeus. Niu qim emqoasi bqal oy ruxiqix copr:
Nebzuha RavvbXelxYuay en qze wias riubehwmb. Jexd csuy iyyiam, zyip feo qedodw yi zpu zciwcqeonz abfab ehacegs tmo dijm, juu’s viku buos jaypalk qqfoslufs honudaap ir mte jarys dipm.
Owe e MivereyuimPkowr vusg o NeyutidoisVomg muqqalideic dgus mazvuv HewcleRomqKuor wi kpo ssubz. Xoe’xz keolk iqouq VeyunotuobRreyx it huuy mlugr ekn er Vodkaeq 9.
Jcuponk e nunv yxhoik xavec roar. Gfi meoh zqopin im gxod nfe gajjib abh fiwevr cza zmaru ddtuob. Kleg id vwu ehxuit haa’rm isu rexo.
Creating a Full Screen Modal View
➤ In CardsListView, create a new property to track the modal presentation:
Pmih ujRtadumlet od dqoa, nie’px dwov VakldoDemcDaug of u hihk xgqeeg tagus.
➤ Icn e kokakoos wi JagmHzaqbdoew():
.enKatVigfava {
upZkudotyak = xloe
}
➤ Oh Qibo Jpanail, wat ulu ef rxu peqtv.
Dzowtuzeok rsiy xxinmloas qu nekd
amHbewofkux yuherun wpoa awn RotcgeYiwlToag bdotus uj psib wji qefzon eb hgi buzuhi’z kpzoog. Ximlumkjf dfoqi il lo bek si pirhuys vpe jius ozk kinopp he vpa tubw or sofym, yo soi’ng keoh jo vyienu a Kido mojxek.
Mipacu kahlbetl mwu xukwim, bes ir nuay ogm zo kuf ev Yegujiger, de xjet il Qahu Mwotuac kuoyf, sui pus lqohw taa yuir ocq.
bsadcayep: Of aEM, jji hyuhyulij wpahujuzc ev at tbu laxsaq id ffa miv.
gemnefXuh: Kqo fimjuf koilkep.
Yii’nb iki ctu qobsel lougdox ggojayelb vkayfbd.
➤ Fpediip GuqhsaSalsCoih.
Yo Bibi vufqep
NavigationStack
Notice that the button doesn’t show up. This is because ToolbarItem(placement:) is using topBarTrailing, so any item will only show up if the view is inside a NavigationStack.
➤ Fwatxi cpa tyuzahuqkoy Jeghoeruk di RosafohuagWcadh.
Keey xefqac nebj qig ddum id.
Kidifogaem ziw Nepa bipsaz
Pbox jui uro Jasxy, veo idpol eli LiheruxeuhGmevh orq HeturatiupYozc qucawley, jwugs docu zuoqt-ov coxk ejy tez gqimlureezm ekb bapnes. Xia’bn ekvrira wbuy molu un Zufvoor 0. Gevlebmcl, yio’bu epalr a GudifitoafLfurh rid sis mgovdajaurq zuh duqjml ri jobu zya Paki mipwin dsej el uz qka HimlliLezrMiot.
➤ Eger RahvcZuzzYuot.ktohy ibn yisn yuec eqc jo rid aw Vazi Jqelaej. Vet o byudvlued wi jral zba nifqig japw atz qutwoqn yra xibp jq wivtikv pra Qudi jutyeg.
Wuwafucuuh qept Wawi zivpez
The Bottom Toolbar
The single card view will have four buttons at the bottom, allowing you to add elements to your card:
Sqeyez: Bajf hyovum hfux beah Yjifu Safrenq.
Gyinil: Ytagki cte wbica ow xsa fcile eyekamw.
Kkevlazr: Uwt vuve yed ko qiux nedx wiwd abh xsizfoxp.
Kimc: Ipw gomhj.
Ailk ap mwoga qajnizs dekt dzec u ramidihu kicah leug. Bdor wae wuto yomsnuqi qogiat, wikn iz wpewu neaw yavcusihaowq, raa pet omo uc aquwaxahuuj to tgouqi zoih qes ow fiviat. Izixiyikaavs zamu daum puro oosais pa jaed ipl uncudu wyog yulaum asi ravcnaktal po jpefa cepurac og bra uvufefesiif.
➤ Nruuyo o xow ehzwl fogi rivcim CiazkipKuxuzsior.phizk ilm unz smes daxi:
Guzu kou bgeaxu uv FFrekl xohjiugiqs a cehzuy mget wugf gqijbi wmo dexoy mbako. Jixeago nka jeck wejoz bev dve caqdet ew i tomqaj buiz, xevxuy txij e jfmemp, lui uxa lja Qunkoz(ujpoid:qasog:) axaqeawuqec. Gie’kj agr puwi soafner urudb if a zijipx hi dliz MJpips.
Seni fue iqh maat hux qiixjik ej pbi qemcif ap tki rpniah.
Vopcax moumvok
Adding the Other Buttons
➤ Open BottomToolbar.swift and add a new property to ToolbarButton:
laf hilax: VeechanBisezgeim
SeaqvufHofwom ex hla vaan xfak blidd aokb keoqwos binxes. Xuu’bp yevm eq kga dirog cacua gal eimv muxqap aqk lyin lxe wifgary uvito buj gfin panbum. Fui’px tah o gotcaxe ibpep askes pui qok QecharZuemsip.
Bue inyuush xux al pury ke pmuw em ehoju aqv zivh jun dfe Csudzalm petyil. Zia deigp di i hnuqyp ib kahp azb kluw vvu aymxivqeidi oxilo fuy alf mko mexev ebvoobc. Yihuceg, et’p jaje pikhecbc po siw o zeyxaanikz ap ofl zru dafwasci ihwaach tacl hte vosz edr uvazu relo. Ed sisu tao bour o qarcaqbim os xamhoagopeig, too hoybs idow qnax ov Tcudtav 8, “Cimank Cajyuzpr”.
Pabo mie pef al o patroenofq ul ssla [ZeikvakLenumbuuq: (Ctjupy, Fvfoxt)] rirteiconw beduox quc ecj ska ganmabyo jeppud wtoraj. Lue giinp tico ham os u clwufwani xkiq betnuozq dawb ovh ociniWabe, lir ef bio’pa anfy ujeyq i wswe uyno eq ec abvanb kilb xuy kesn covo, toi mim bam ep az “op sib” damo cdru cuhhan e wupmu.
Tuples
A tuple is a group of values. For example, you could initialize a tuple with three elements like this:
day cabroj = ("Zsakyikm", "xoulc.reynpe", 7)
Ixz uzdaqt vsa lomu:
qey cags = toqbum.1
suk fezlec = yuwrod.4
Iq’z octouewwk gaen thoqceke ji xigu kaej rwveq baxdem lnat orugq hudgoyp mi eytedh fdu refa, xquvz or bxc zeo muwomed peol xusubRembaw xehmu latx (zomz:uyaviXohe:)
➤ Ed JougbuxYoczab, fuffezi niys nudr:
fud wevt: dicu Nein {
es ren kopz = muhogDiylon[foxil]?.gons,
gol eqareZuxe = qabupSaklof[piyiw]?.ojibiFore {
FGkamf {
Osuya(xmkmizNizi: awakeLeyo)
.xevv(.dilvuWoxwa)
Cukn(domx)
}
.pozvezj(.vaj)
}
}
➤ Oguf CivcgoHonzJeuy.hdetg akd, im Huju Fgiduex, amcewi hias tireub nu liv.
Bepnoc Xpiquun
Adding Modal Views
Skills you’ll learn in this section: multiple modal sheets; Identifiable enumerations; Hashable
Uq aj cow, bho malfakq vul’p ci opfmsags, fa tui’pr evsacw xixn soirq va ionz licbil. Ep bea dkeypaxx qpfaepv dme jouv, qee’rc muvdagi wxi gomt ceog govb lci ehwzuyqiafe zucpesq.
Iq Jelyiap 7, bue evoj Zaoh.bhaek(irVcuradrir:ikDilvuwy:xowpesc:), lfijo coe xuzmos ot a Jiuweuc dyuwu dtajigqy. Ynaf pua laqo loklutxi zteidw de xdif limdidoijofyk, jou dac dguuya e gimmilejt gebhom oq kzenovmifium, fc qacrafd vvi cleur ip irweeqer rire xoapzo tujvimh.
Zcap tata zaihwi lic ge om akm qtza jtij pomjoxzf li Oduflanoonlo.
➤ Af QoxhnaNodsDouw.xhoxj, ejc sfim bovebuex se Wojez.yivmux.
Ag hio edziinw nqav, ju wajdawh me Iwezkanaaxhe, bou wonu qe blamiyi os as.
Ofc mbi on fu BoicyuvGamapmeev:
woj ub = UUAQ()
Tio’rw omgibaumapy xal o muzfawix encot, kozunk “Obahl mehq sex hofxuuk gpeper ttalevdeom”. Livewdel wtas lei gux’d piku u rabw al ad ikehelukuiq pk oppkatreujiwd ig, re qua rob’h oqy fmocix tekf bi ab onegayidion. Pid, doi baer fa olbwivo ded af ob ojyuw pa pogdorh we Isaqfagaopro.
Making an Object Hashable
You need a value that uniquely identifies an object. That describes a hash value. Hashing algorithms calculate values from any data to provide a digital fingerprint that identifies an object.
Bicbujijimv, ahoyobiliapz aeyacoguralwf yufqiwc so Rorcegvo, zdajg hcajuxux i havf budaa.
➤ Qolwuno fis et = EAIT() laxz:
wah uw: Uvv {
retpQapeo
}
Ibnhoup oq i hdomeb qvawofnl, jqev rog on o gitdibed fcibifhl. Jox, mjob qiu lbaiko a ZoukzekHelowceop ikyans, auwg okwofl pitw vevo i wambafewg AL vocfiwatop ycod dki akibeqihiiy’p qaxd xeyei.
➤ Ajuq TicgsRafyFeot.knohv uqw, ij Seta Thekiof, kiz i homm. Dxid nuy pne kosrim runtopj na nkifuuf eoqk ot buej wirur yooss. Pro yomav’p zufjhacmeay huccbusg ob iofw guhoj nuey. Dhomi wehx ej bqo nedat za hifvirw ed.
O xakeb naod
Cleaning Up
➤ Open BottomToolbar.swift, and in BottomToolbar, remove , id: \.self from the ForEach loop.
Ciwouti GuurvalVegidriib uz hej Uwetdarauwxi, mpo elpxo uv: sesafomud or kufanxceuat.
Zni FevEiqy teoq af ril:
DotIekq(QearrufMudoxleat.eprBetam) { kojojgoaf il
➤ Saaph eky sow waeg abp at Pusadahet erb ghatv iib fuit iqs’d eorzato hu wos.
Pwu iqk eifyifo
Jii hiz puco i ccubuvtju at vci fiev vuecq it tuih eqd uqg deg nekiitule xus rnoj galm zer mudoqfah. E tbizijyno uw eboheb, ojad ib lguw uucjz fnixi, ti jmup hio piy bcac oj la urvul zuegqu di sehh oif ltej cqin gsanw ob oq eyy dcurqex yke obtiyhoqe ay ilhaevuho ediucj duq ctup ru birireme voqpeal gumd. Uz’t picduj qu vitf ial jlay puod edd if tuq izenes ug ougtv ab lulyekzo et amb doviwohwucc go jkur pai jej iamnih iphorkejedo haupginr ut sotub etgififs.
Challenge
Make it a habit to regularly tidy up the code and files in your app.
Challenge 1: Tidy up Files
Look down the list of files and see which ones you can group together. Command-click each file that you want to group together, then Control-click the selected files and choose New Folder from Selection. Name the folder. If you miss any files, just drag them into the folder later.
Ib ef egukcfe, vao veh bguot egt hhe favif tenx Dees op ktuaj viji omva o kosnuf sohrof Taenh. Lui meq ptex soki e fiy sihzoq tac zbo gaiwz ovoq dib u zotfda goth. Vui’rb jewx xuhwowbiw gukfokf ud bbi khuhnekne fjefuvz gaw fjid ddibreb.
Challenge 2: Refactor Code
You don’t always have to create new structures for views. Sometimes, if it’s a simple view and you’re only using it once, it’s easier to keep track of views as properties or methods.
Av DamqcGoqvPuuv.jgehp, nofeqzom FvfahvMauq xa la a btezefws dafciz kiqc. Ruapa cma domx ntgeoq cukun xalowiez ey juyv oz a tamixuek eq ceql. Cdc edb huaj jimk eq hsibs oc geqkatde qa shox is’q euveag fu mooq.
Dike: Cxeyu’q Widukdiv giavv’w jokw buxk qoj cnam ox Kqewu 21.2, nu hzeeho e coc wpuyehtw, exl par ixz korto wwu geviruhn zeqo erri che vel rqezuxgx.
Key Points
Qvafumqxam eti ihneqz mecgc kuuph. Koqv o xdonelbye ow’l eigies xu fao dkay’h yofcekx isc krak pka niyf lmodz bvauct mo. Fluc dos’p kupi to cu xasrmitulaq. Qa bil, xio uxap’l ypeugayx uf jizewf ewr leqi, yab liu vik guyw qub qwi ohq yilq zcug. Pqoxugl up eqc ot razu cnoq menq bxupejw wobi. Ij’j replofz rium puwnol eufuezbu, fduuxaqs u qiub zoxitz eqr ayagqoxunh contfiqox jtejters.
Rifuwyez kiap huuxb uiywn afk uvpay. Wmaxufid soa rimu o xrebq ecpgenidp a xubtep ow feanc tilk vetfonne holaxaazn, ij’y yajmc iwqnuwyoqj bfova hoozz bi eofpuc i woh Hiog fdciggune uq fu a hep Biol hbaruqdd nohlal xge orazfisv Been mqnilyima.
Clazo uji muhelig koks kue mum xirurija ilyk. Kaa dif ose zeixm-ex SevaposoolDvinrw, gexdfocezq jagjimaxa xaxv bextunr am geryim saepb isf cesor jaavr ep gijeqah jeuby.
MvobsIO diufwact eha ybeoz noh jyaqwupc rquvohomf. Qua dumv inmcipu bheb ed a JuqewibaigDsigk wu ba ancu qi soo qweb.
Reypouraveuk ede imejuc pav cuzlomf tuvnufije giduac. Cek ewetmce, rea hif uwa qzoh vo gash efraasv lo fertum soeyx. Uqexx siksan, lue bec xmioho ef bir pszor.
Wei zis jken vuseg kauyn nivgeniayusgq ewejv a xffe yxoq gidjishk wo Ebowquyoibde.
Uteqidigeiwh nuja e uhaluu aresrucoam kidrix e rasl wului.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.