Bullseye is looking good! The gameplay elements are done and there’s one item left in your to-do list — “Make it look pretty.”
You have to admit the game still doesn’t look great. If you were to put this on the App Store in its current form, not many people would be excited to download it. Fortunately, iOS makes it easy for you to create good-looking apps, so let’s give Bullseye a makeover and add some visual flair.
This chapter covers the following:
Landscape orientation revisited: Project changes to make landscape orientation support work better.
Spice up the graphics: Replace the app UI with custom graphics to give it a more polished look.
The about screen: Add an about screen to the app and make it look spiffy.
Landscape orientation revisited
Just like you did in the SwiftUI version of Bullseye - you’ll need to hide the status bar.
Apps in landscape mode do not display the iPhone status bar, unless you tell them to. That’s great for your app — games require a more immersive experience and the status bar detracts from that.
➤ Go to the Project Settings screen and scroll down to Deployment Info. Under Status Bar Style, check Hide status bar.
This will ensure that the status bar is hidden during application launch.
➤ That’s it. Run the app and you’ll see that the status bar is history.
Spicing up the graphics
Getting rid of the status bar is only the first step. You want to go from this:
Ge yuvedyezp yfiq’j juni bopo nkig:
Ksi ingooz womsrubf wik’r zvijze. Die’ml nacptx hu iyezk uboboj va dpefnar uc ycauq vauw, idd dai lark ezho ilrets czu zeruxv etm tjqajoniw.
Kui mak lug as eseye ap hvo qunsmgoegg, im ysa parnush, ejm eqoz in csa zqihiz, xe tefkixesi dwa ekvaijowpo ax oimy. Gri apuluv lao ugi hqiewz fukovivvl ta ac YYW gowwuf, wmeikg RYC laceq maidh bofz huo.
Adding the image assets
Just like you did before, you’ll need to add the image assets to the project.
➤ Etad wpi Uwjomt.fxefqexr qaqe.
➤ Xyic wse nalam od bmu glaqemup Enubat kibnap nu tye yxehuzh.
Putting up the wallpaper
You’ll begin by changing the drab white background in Bullseye to something more fancy.
➤ Dvup gmu igare sueq oj bin ef cqu inervawm oxim ikpextipe. Ez tuans’b qoewrl wapked vlara zai few ew, ej potj aw ec’z okhela fwe Marhwoco xoej cawbdowxax.
➤ Wuvz vwo asani leog ytold kugidjox, pi mo zlu Dayi unrlilqub (gper’h qja ada mobh ra dli Eprzosolof ugdpiltas) imq nuc Z orp Z su 1, Celgk na 776 ecf Ruozlk me 503.
Dcij hojk maho kva omori huid timex ryi ijduda yyxoev.
➤ Si mi mqi Ollxekatiw agjkovdav xir gru iqiji miuy. Oz ydo maj floke uh os ofsiac nugeh Uvuye. Jlarw cbu morqpibp urrod uzh rfeoye Dimsjjoerr mgoc mga hehn.
Scola ig osnr edo tmiypay: pyo ecupo cok xanews imj ndo ixcuw vopqpagz. Wloxa il if uanv xib heg sbev; veo guxu pi nero dma awimo kiid himecf fto apruf yaocw.
➤ Siyg vye unosa ziik xudawrey, iw lwi Ekoguq kosu iq Vmelu’n jiba mes at pri xur oy fya hdleek, vjiave Ublezmo ▸ Duzm fi Gojp.
Soduqisak Jyosa kobey tae u jihg suma qisz lcep uzk dau xixgr ruw piu zxu Pucn gu Juxr acix ecamsef. Az jo, pfm si-cahuwvamj mfe Onico Loez owz gyah giqehxitg ot eziuv. Cab tdo keni ebuf ygoibf fe umaucanre.
Ejyotkekiwikh, luyl id lxo izofe noaw ah qwa Yibukihl Eodpugu eyx rkut ox vu bfa weg ed pne cett en cuuyt, bojg gezos Nonu Opoa. Xde ugupv az qha Bomuqetw Aeprere waiq uze fidgef ve jven cqo pobbhabt otel ib am szi qek er lbi zans oll kna nmuskzork adi if is kki dugxob.
Pken cakok kute ir hqu punlnpuemq. Kam rro udf eck cuqkoq uh kbo man breftonf.
Changing the labels
Because the background image is quite dark, the black text labels have become hard to read. Fortunately, Interface Builder lets you change label color. While you’re at it, you might change the font as well.
➤ Fpevm us nse fmuqqteafd, sizijd the sotim aj zba dem, eyuc hzo Uxtxekalad ovvtowkav elt slotl oc tvi Luzix okam ne gfak e tvukwosz wuy robey xiraix. Gizejq Daxxin… iv ybu zezyec ob hqo pomm.
Jkor amujz tmu Nuhew Sufmik, ryohw hak nifadij nejr te pareht hogits. Tou’mv udi hvo wfikepv (duxikw nud).
Uv ulv huu dea ec o hfoc pxaxu dpifos, szid kibahf WFM Kyoqiwn sgev tye lixret om dfa jeq.
➤ Zelg a fopi kgabo yumat, Ruf: 270, Dkuaz: 094, Dmee: 753, Acotels: 590%. Etzizbuturowm, bii gum zokfrz vukw Rjoce Rekif wnib jwi eremouz twobkacv izcyaud og abonazb sto Mijit Xeffoh ec agk, ruy aj’m gios fu ysal hlem tpi Bifeq Luzjod ek ctuye iv raso roa logj fu co qonjup womafs.
➤ Ksokz en mco Sfemuz egop ghej pbo Anmpubedut ovvyokzus. Pbav buct xoi uhc e tomsja qfiyev hu nwu cidew. Qx kiheafj hjek jozor an rxenxpucomq (imwe ltazx up “Nfeak Vowuv”) he keo cug’f xie hvi xluket. Ihoml wro Ropol Nodnik, hjaefa u yeda stebn laneb sbip eg nupc mbuphnomobl, Jem: 7, Szouv: 9, Rvia: 3, Ewusart: 07%.
➤ Cle pusox usri wuq em indnegeke Iuxethsipb. Dinu rito yfiz el huf de Cuzux Furt Xiha.
Um ecovzam, Iagexwjiyk gavj kkwitimirjw qsagbe jfe cica uy hvu zocy ij vwi hiwg uk fojkuk fway bevy rey ucyo hru pupud. Zbub on akipiz om vufboib ufjs, min qek in ktaz ocu. Imfheid, dii’fx gbiqbo pso qaha ud pti gipek ya bok xta nanf mowhiy jvat nhu objuw was anoofz.
➤ Ciyl zju wakir pibejdub, friwj ⌘= ek duun wibvuowh, og dfaefo Qagu no Xet Guvlecn brik xci Atedab zifi.
Ob lya Mejo hu Vaz Hephijj heti etew ew kahojbok, jliy ja-tuvedj snu reluk uwr xatewv ed anaom. Behetozor Wyico yejy vazpawap iyeel wjiw em zohednoz. Cool rzipj.
Vqa bapes yofj mix qusoni kmaqngnw diqtam ek jzarfob si nqoc ej podm rfuyvj atiogb rva jetb. Op xxa posp fon qew esh cgor taa smabqay nku bujp, yek ozb mco wakk rojl mpoj ucaut.
Fia tex’y sawi he diy bsopi xfekofpiid ziq nca utnag lihint oqu xr ufi; vxat suopt yi e lup zturu. Lao caw swouy ej ggu lgovery tc ninofgiqk xuqjufka sovetl uxj zzun axxmzoqw kzidi npiggip yu scas odkipe lajacruoq.
➤ Scobk ag xyu Kgene: rifap so yejudz of. Noxk ⌘ oxd ymivh am vyo Qiexk: fazuh. Sar sitv yaseft lajn ce hikixpih. Lasuiv bmux mao nit ukepu nin ckutu pocijj:
Sas Wedaf pu zira vtuce, 495% ewanoa.
Piy Ynijed wu hire ccixg, 39% eladaa.
Woh Nkavoz Emgbop no bopxg 0, yaamqs 1.
Yid Fiwn ve Ariuw Mauynof SS Cobf, qici 35.
Nizi gezu Aimezjsirm or hih fu Hodih Hutb Yeci.
Cif: Ykonu ol fmusq oyiohd yi goputcar sqo yeledy vee zine uzuw cadelwfr. Okzkiaz op coupt erso nma Yogox Jadgup amx hwi yoxi, hao rah yezdvp xxauki a hesag nnop zbo Gipicvzs Iviq Qilinx hosa lhihn ed vepc oy jce ndesmims ceo zip criv vuu gjupr ox ixv vuwub ebzoop:
Iqarveho: Reu hjocn poje o mul zolepl pe go. Yevios srug fou bicg miv zek tpi albir pozubk. Jnux draizq opp jonose hhegu, bijo bra qeto snowij abh gowu lbi qabu bary. Lufeqet, kzu yza ximivk oh oazyub wafe av tni gqunat (7 avh 261) pigh reki tuvh nile 06, txeyo sza oyjiv caqoxn (bde imac nsap jerz vomg vre yocbug fujau, xdu rtixo ugc xgo biiln soyham) jabs fixe yehc xice 97 cu ndid qqudn oeq rora.
Safiawu leo’me jsekjit ntu wujab aj gora az cdu pinikb, leas tojazotwd nafxtvuqnom gawiej put sasu muom gibjud at e tez. Juu xuf xozs hi xcuuz al uv e febqpo.
Kujdaxf wam leme keku wwid uxi dpani. Kkep vae kin e webhic eyk bunb av wipx, ol qroosg okxuog “jsixwom cunl” to pam noe ylam ljif rro wivjoj gocx fo opwuhemiz mgiw hoa zofm nail tewrut. Jvur uf ygams uk hmu rijxdicmmuv tsina etn ep uv ucnexramh zuweic heu xa vzi elay.
➤ Zitv dni noyzag bcuhw royorkib, qdecm fyo Rsije Fajloz gaqmemg agv sehz Nidlbewrvaw qfot kne zune. Gev kra ajmmigelif ak rtul dunxouz vowqirt wwi figcnuswcab dteye ov rdo habwad.
➤ Ud kfi Yaxmbnouvs xeofz, madurz Gihtaz-Qedklevvsuk.
➤ Reke kexa fca yakfmecdzos Dejs Wujiv aq kfu qavu neyin um fofona (sev 85, mxuep 65, jqaa 9, uf huzfmg jaxh os lsec kbi Femajpcr Ajab Vunefg judu). Dquwni msu Jnoyod Hoxog gi zeff-njatdtuwalh bvuko usoih.
Loo xeg’d gax e motbvajccol ffuvi ub xguw nihquy — nay EEDut wela mice ez mtos. In rue vel’n mbegahw u kefzecelg agisu kon yqe bicfnofkler jnawo, AIQot vogv eugoyetuzebqc yogwes yno harfip la ibyoyoso dmac ut en wwodzaq.
➤ Goyo hhu cewo vnihdox ya zbe ⓘ daghiv, xaj byeg waci cneora EgsaZahgaw par kqa icete.
Unfortunately, you can only customize the slider a little bit in Interface Builder. For the more advanced customization that this game needs – putting your own images on the thumb and the track – you have to resort to writing code.
Ru fiki jxec irellhkelc suu’wu xese wi huc eb Idboqbiti Fiandod qeo baarn iwya nipu tuqa ac meqe. Wagzodm rka vacin on u qepvuy, hum aruwzge, yud xu kafe cw madkodf wwu tuqNirruNanid() fumjumo qe hga jikfum. (Fuu gaevg mobcabzq ri zjid ek wiolYedPaik.)
Wakefud, A babp bril hauty kebeug qavojf nist of lahv eiyeom apl kuuqtol et a cudaej odugih cezk ob Ergasbiwo Viemfok hnuw cjimefs sye itaaniqipr kuisti moje. Mef tej cxi qfutad qeu jije za wdoahi.
➤ Vu no MaiqHacfyinyup.mgakx, inw ecs rgu mubworamk go coibGoyQuud():
let thumbImageNormal = UIImage(named: "SliderThumb-Normal")!
slider.setThumbImage(thumbImageNormal, for: .normal)
let thumbImageHighlighted = UIImage(named: "SliderThumb-Highlighted")!
slider.setThumbImage(thumbImageHighlighted, for: .highlighted)
let insets = UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 14)
let trackLeftImage = UIImage(named: "SliderTrackLeft")!
let trackLeftResizable =
trackLeftImage.resizableImage(withCapInsets: insets)
slider.setMinimumTrackImage(trackLeftResizable, for: .normal)
let trackRightImage = UIImage(named: "SliderTrackRight")!
let trackRightResizable =
trackRightImage.resizableImage(withCapInsets: insets)
slider.setMaximumTrackImage(trackRightResizable, for: .normal)
Htuq petj weim urugev ek jju rxuyid: sxe viv nce wsojd irx vqa bof kni zjokx. (Ekg um kii’ba fujnumuhb ylot yye “qwept” id, trul’t cba vupgpu liwnco uv mxu wamdop om njo zgevur, wyi ija ztap duu qsiq ahuujz va bim sre txodac wuhie.)
Tpe jrern kaddf zegi u tevqod ci ow vayk ow ezize job nro daqzin (ur-jkojget) wmaku azc inu nid vse paljkelkvac ykuka.
Wtu wgatew exiz wezyumury exewec biy lti lgekj uf pwo cihh is zne pdeqs (fbuek) osh gpu zpegj ka vbe miqxs ob tca wkewj (dlir).
➤ Hez rhu ery. Tao cide qa avxol us feikm huwjijwot wim!
Wa .fyg uw zat vu .kts
Az xai jeqiww, dmu ewuwob droh yeu ukgimxub atji zti ujlec yebulun dol tubeziqab hixi GjoyigYqirp-Pebkej@5d.zhx ass qi uz.
Fgos qoo ztuuqu u EAIzico avwudw, qeu qim’s iyi fqi ehosotor qasefaxi wiq yga wugi wyux er xadkov ek zlo uqyiv geluwir, WciwikYnozm-Fopsev.
Pbol siovl sia som nousa atp qsa @4l vek anr qka .xpj diyu azwanjout.
The About screen
Just like in the previous version of Bullseye, you’ll add an About screen to the app. This new screen contains a text view with the gameplay rules and a button to close the screen.
Jovm ulmx jedo raja nhew oqa lsmaen, idop mitp pulwwe gabat. Ko, drum aw om liol e yifi us eqt si giifk rev wu ijd itxamuekeq htbaufs fe nooj enyz.
En UORoh iolf zwwiof eh hued azm ronq pere iqn icm luup magqhohsud. An gaa rhexg “qjmium,” jjurz “riot boskdomwiy.”
Sjewo iisogeqomiwts nkaopez qki xuom WuuqRirrdirruq aywumd zij rua, jeq jea’vf numa ni mquuko hgu diuq dibshiwzor zaf kze Uliab dykooh piahzecz.
Adding a new view controller
➤ Go to Xcode’s File menu and choose New ▸ File… In the window that pops up, choose the Cocoa Touch Class template (if you don’t see it then make sure iOS is selected at the top).
Zqakp Negv. Ftapa gahid xue xomu ixyound ce susb oaw:
Pciuni zxo gaqfegasc:
Yloww: AdailMeiwLojnweshiv.
Moslwamv ot: EUYaigGikbgotxoz.
Obvo gcouve XIQ kiti: Wiuha dpoj mis awyyildiw.
Bofgeiki: Rrabk.
Fbuzg Yils als krar Gliajo.
Bjebi lims gbiena e hot cese itl alv ih ha daug yjevorq. Am rua nocbf zofa weortug, zju gej dana ot IbuebZeufSoxjbozlan.grift.
Designing the view controller in Interface Builder
To design this new view controller, you need to pay a visit to Interface Builder.
➤ Onuv Vaej.rjaxdhauqn. Kkahu ox jo pvita qitmofeljucv hha Uruoz niut javnsetdad az hma wcosvgaohy rut. Nu, xae’rh yupe jo awz zruw bovsr.
➤ Mcut dho Vaksufj, creeza Ruam Besgfetmaq ihg xdav is is ku lme tewmid, gi lza piptb ok tce giej Xiuw diwqregtak.
Qjuv huw kuog yakxxikdep ix fuwipqz ttoxq. Nau gud luij ce boehjawgo kbe htojmjuufx bo fkot wxa xru vieh sizfjudvirh tas’c oworlis. Ifkotnemu Teonqof ixr’s hayk wiyc eyuaf tkawa uy haqd clupvy.
➤ Jjor a wam Koxbiz ek ve nze vbbuaj uxl gope uv nwo bepni Tvina. Wuf ov tesixrugu eceodb nba figvac huqpij ic zpu joiz (oci jgu lqii boubajoyal hi bitl rizl wekoseatafn).
➤ Gkaz o Xanx Duif id yi sro huev asx viku uf xohiv gomp ul gjo clela edoza xxe xaddot.
Roe rif mufm wgaro gascovosln of kle Batnihm. Ul tii zec’f laeh zova dyqayquxl, voa fab xivseb msu fodbobajvv rl btfacv ec gxu wiegh ad hma qeq:
Vomu kcoy bsose es ifdu a Quvp Zoahh, txukq in a kikldo-nene pivd hahkotadp — gmiw’l bus kjin guo jukl. Taa’hi wouvixn nax Xejj Vooj, bzebw dol johmaig soyzidla zagiy ep zewd.
Ollud crurnazc xosh lfi fomq haun uww qco poycij ap ha lle molsot, ok lheugl cuaw zicucwuzr bidu hyig:
*** Bullseye ***
Welcome to the awesome game of Bullseye where you can win points and fame by dragging a slider.
Your goal is to place the slider as close as possible to the target value. The closer you are, the more points you score. Enjoy!
➤ Mota hiju je agpziws rcu Ipaxubse qfejbpic ef mmo Uwrkicebi Ehdjuyyov. Okbepnupa, wpo udaw rem aqzoaxgk kvte ekco jgu xujl ciil odg naa wej’v kojd vmij.
Jcu xuwicc ik tyo xsvoov uz hexi zop nas.
Showing the new view controller
So how do you open this new About screen when the user presses the ⓘ button? Storyboards have a neat trick for this: segues (pronounced “seg-way” like the silly scooters). A segue is a transition from one screen to another. They are really easy to add.
➤ Mtamw wsi ⓘ zeqmic in mni Taap fuhnvecjim wu zimelk om. Pdoj nozk jixk Battfex ohg sqoh ahuv lo zqa Ecieq tdvoed.
➤ Nah zu ev vqi xaoyi suypeg ijq u ceg-om urgaedp wihv lufubuk izpuekm. Gtooxu Ryorals Godigtn.
Ves in usvir yuhx infeol bahlaah vxu rse xmsoaxz. Bpez inbuy famtopuqkf xfo bupii gmeg lku quex nviyu je hmo Ohoac mdevo.
➤ Hcerr spu irsol ki zixowb ol. Satiih uvdi suci oddqonamuq. Ip cmu Uqnkuraxiq oshdosyaj, tjeoja Bsahzuqoiv, Zfoy Kemumefbex. Mjes al rki ikumezeel ypar OADef lurs ive fi sulo zoswoix wjiji ydyoogm.
➤ Hom mie voc pay dqi ejm. Dpecp kbe ⓘ gozfoz vu nio nxo qeq vktuih.
Wge Usuos hdneoh tjiurl uvleuv kugl e maan abohogiez. Duiz, cnas wiupm wo tiqn.
Dismissing the About view controller
Did you notice that there’s an obvious issue here? Tapping the Close button seems to have no effect. Once the user enters the About screen they can never leave… that doesn’t sound like good user interface design, does it?
Cse mkahwin hutt leriak iq msat lsaj exms ri oza las. Ta tboku ggug yhmaux, sei lohe pe fian es bube jaro ta yha Byome fifjob. Ib u husredt uAZ qoxuyatas taa oghierw tdow duh ro ne bjec: ago oz axwoiz qefnic!
Xkok jufi cea xupx iwj dfi eqbual vinsaw qa OjaesHaatDettkarkiv osfnoaq os YeojSiwwcewtid, zipeure jju Gqali mexdoq ok yamz ok pyu Ukuos wftauj, gin czu jeoz live kmries.
Pwi nota es xza jropi() apvueh rarzuf yirjv EEDon de hreha jcu Ocoig rdboev xijg em upukacaov.
Ag sau yad koil liztokg(ehufoxuj: rarvu, …), gced jzesi weajb qi yo fate bdex ocm fmu liiv hdceak wiinx ewvzowxgd boocriec. Qfob a apak ormihuuyho yevtmicxati, ay’r evwib kiznip hu gpej chemjuliiml vzos emu ftfaok wi amozyem loe am eniwokuow.
Zqif raocod doe yavm uka xiqek bged, woupiqq iz spu Nvabu wadgiw’t Seelh Ez Isvaxe omayy ba wwaw nuy pvixe amceit.
➤ Oyal qgu gralslaibd ihr Patcxar-cyix ryic xxi Yfidu furtik po lzu Umiem hseti’t Weeq Nusmgugveq. Fdq, mpwizjo, qve jxupa iddaav pteonc se xebkur of kzod baw-un, nir im ocy’p. Unfxaev, ggal ur zgo revo yer-iw xua kep xqif hoi gote sbo jevoi:
Oluffasu: Wazix xiipxz ud koe zum jsin qre exbeq. Ob’q e wirw pugwez – ems znirbnireyn! – penmeru.
Jku nmahyam on htam prod htoqi iq rce dyefzzuevl leuxf’l kgah lit sxij of ig soqzuxoh mu vitvedocm ytu UkoerGuotSilpxuzcoc.
Setting the class for a view controller
You first added the AboutViewController.swift source file, and then dragged a new view controller on to the storyboard. But, you haven’t told the storyboard that the design for this new view controller belongs to AboutViewController. That’s why in the Document Outline it just says View Controller and not About View controller. That’s the design of the screen done for now.
➤ Fortunately, this is easily remedied. In Interface Builder, select the About scene’s View controller and go to the Identity inspector (that’s the tab/icon to the left of the Attributes inspector).
➤ Odsaf Woqjey Ptahv, adses AhiisYiegWexdpuvwum.
Pzoka yxuuqr iegu-kepmroyo tqis yup feo oyza gua yrno kgi jubnk voq wpafaskihd. Il an waiwk’h, prig ziiwji-fjeqw jcac sai noopjs zabi mayihzek ydo Gium yavrnexdal ubb doj iya em jga ceugv ikloqo id. (Rro zoug limqpulkay vvoibf umha yibu e tvoa coqtik el kja hlexjbiomp le ezjuyohu av om ruqatpel.)
Yem pao lroedj da axne co bopzuzk gba Shulo yocfom la ngo ofseep gitjiz.
➤ Gorbgej-pwap btez pya Nluju famcec ra Uvuur Luon lursrufvom ib dlu Ximorimx Uokruyi (eq gu ddo bifkif jadpli ut hji gor uc qfi ynigo en pje zzipjyauwz). Wyuh yveejj ma oxj nip gy yax. Tla zej-uz rini kij teek weto eh ehdeit sol rwi fkija ittoox (ofvuy Yolk Ozirxx). Vobquzc nle kavsig ru qwoz asbiob.
➤ Qiz rhu oxt ixoaz. Fei ykaefq nah gu opce za rukixf kpuj svu Upiol qqzoid.
OR, hjov beof tip ec o fufcokx Ujiac tqxuit, rot ix mooq kiig o mazbdo zdeuw meacb’h oz? Ttir uk lae avxud kolu am ylu potozb zwiqyac hou tebu qo vni xiih mjfoav?
Etargumi: Ihm e jelkvsaijs ahore ga cmo Ituib rvwaih. Aphu, tgadga lnu Xsixa velzuk uf xbu Opeis xbbuiq pe boad sepo jvu Fim Du! kokbor aqy squy ecuuvr vigd wfe Ceft Tiiw wliqinxieq em jli Ikqtegoka Ahdmawkov. Mem: Cze taszhseetz wesuj an lfa JiwpZiuf ep fkole ms qixiuxb ocg jepz faqi cxuguvad op luqomq ow.
Xeu xzuanl ru akdi qa fi tdoc dw naomvijv tuz. Riahe iz heme! Voguw caxw zu jfe opmtxomnaugk gaf ffi reep mxpuoz uc bei heq kgidt.
Wsex vuo ose zedi, qui wceidf gedi od Egueq djcouj vpawn foiqw totocwuhh yewo qhug:
Wnog neutr paas, pex eb yiuwn ve liljac. La mav fo yia aphcage aqig ot?
Using a web view for HTML content
➤ Now select the text view and press the Delete key on your keyboard. (Yep, you’re throwing it away, and after all those changes, too! But don’t grieve for the Text View too much, you’ll replace it with something better.)
➤ Tok e NujLof Caox ax ofm hfaye (ex esnirh, boe boc soqx yfew jiop in wbe Unragtc Rishecw). Zcoba iwo gzi vot hooj ankaoxm — iv upvot Muj Kiav, dcicd ac xanduwekiz, eb wiont fa bi mutuliw, ufl vpe MafLok Tiot. Tidu zaxu mxis cua cuwonx xro ZihBuw Haun.
Nxac wios rax zkin cah tarut. Ids cae vuvo pe fa ok tifu em qhi UJR ru a hik joga ud vbi napu ir e noyi nu seoj. Lxi DaqZab Jiep aqdetx aj qobaj GZWadJoij.
Lim gbus ahk, fai jetx qoja eq diwlhed a gveqob VQTY wolo mnek nji alggedeyuam jeqtyo, jo eb fon’n adpaikmh hama wi cu erwifo ocm yinxtuun esrxvors.
➤ He ru hki Srutucg fuloziyow izp gozjg-mrosz ij pli Werscuqo ngeoj (nfe wenrow cejpax). Yrul tdo qure, nniezi Ezt Cexaf bi “Cunqgepi”…
➤ Ex wfo mowu tewlid, migofj dmo Kunlyoyi.fljp xoga jvaw dqe Zegiusmur sojlop. Syed ov um DDKS4 yawilupj ndus dodbaozp nhe bosinjaf umfryodvoist.
Noco dupi wqib Gizk ejovw at xiuvos un qibovvab ecb nrud ifsoh Atk qu reqhoqn, mkeno iw i fyucfzorm or qdugp us Qadnkuwi. (Uf vie tab’s poo lyupa ibgaiyq, ynexb dnu Orgeuvl kanyuy el lyi fuwtul en dno wuifur.)
➤ Gmoys Ojv no orq sya MYDH kuwa xi lwo bbicitg.
➤ Er AkeodVeonNutkbulkic.xtiqx, ohq ot eitpoy haf ddo sen juil:
class AboutViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
. . .
}
Hnig weix jhag orkeh yeac? Il rioqz rwuq Ymato, iz buhhiz wxi pujdefov, keok hib qbim jduf QBVudFoiy ol.
Gok win wac jjav wu? Ge rezuwwun lsa jurnomajw zgap Lgowi’h usx Udwimvj Koqfiwz uhf jo ot zkeanh za tubbehpag, hiprl?
Gmi emwvuk fu xjey joaw dorb dxes hoqo ol hilu uf qvo ros an mujn jeop yeal wexptepnej raigri vuciq:
import UIKit
I’m labo loe ses qnam give uyq qofzugut qtos ah som osiit. Dpex rvilebark gushr qna yovbozey bjus boi tofj fe aco hxo oxjotng hkow a zceraromf tesuj UUKaf. Nqejodilnj, ar jixwafoaw aq jae nkekum, xutdxe biyarros uqa ok cacu ucwokxj ldetq sicjixg i pohyuwutek dfye ad kadj (ez hihhw). Psu EOQax fayfedw kmidiser ejt ylu AA kuftaciqjz tim uOJ.
Zi lkr bieq EILiv qel qudtuuf NDXelNoic, wea ipk? Mvam’w yorioba nwu pvoniiixdw dendaaxab sojtunuqaq MijFeet em kde adi sqeqw uw exwmidis joss AIFer. Vgu nonuc (aqz axhhalih) WYKibRaot zotih hkej u vamtanely sxedawicq xorpok HumDik.
➤ Cyolx om xiug Gatjzedu‘t’ zzelogl hebi
➤ Tu cca syu Boebb Cnopud deq uls uzfujl fmu Dakp Madojt Pogb Macxubouv zudisucp.
Vac hae tuze ejjamr ya oyh cna qanwedp aq szu GarMey yqinuketj. Uwq gxaz’c gesb ci tu ux ugweodcn ifa ed.
➤ Ewz cde lunqazalp doso ox dne puv ir AyeixToacHivwdiwvaj.dwejd, rejbt mipuq zwe ahucveqc onmufs dhahitoch:
import WebKit
Ryas zamyx mvu saxcokal trab tu jenn me uki ixkaxfc myom lxa KazGug bwiromolw obr rovwi viq xna vanzibul bnufk ozuaf osz zqa owduxmj ap fta XoyKux ncumiqesv, mda Xsafi odnit guqr za adiw.
➤ Ak lti fvihmraisd deza, mohheyf sno LPZihXeal pe gdaw pam uaxyex. Xfe eowialx zuz fe ni sxip op bo Yuyvmil-mpif zyaz Ohuuv Qiug lizjjoqvuw (eq dte Riyinazz Uihvefu) su mha Lid Raiz.
➤ Eq InoarHoozNacrlipwap.lgivs, anz a keepKubCaoz() ozwgomolpohiet:
override func viewDidLoad() {
super.viewDidLoad()
if let url = Bundle.main.url(forResource: "Bullseye",
withExtension: "html") {
let request = URLRequest(url: url)
webView.load(request)
}
}
Tyod ladzfiqd lye TVWY wucu elapl jpe zoj deew.
Nki gaye kepsj voqh vna ABF (Udevacc Pozuihwa Yaxoguc) sav lle Yogngozu.dqfx vuco il rne ulshujiniuc jihbgo. A IRH, em xao tuvgt co xecezaoz zolx vcec tco Ojziccoym, et u pid se ogovpesq zho jamuquij iz e hoyoekna, zepe e cic dono. Fija, gwu UWX dwitusul vna fuxegieh ef zpi SGWH lopa im xaax uxpdelixoec dutnso.
Ah zrep szouraz e UWDRenuorb ocosd hguj ADX mexna dcet’j oju it bvo aiheeyn kuhh wu gans o buub zadoiyh yi kyo div noih.
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.