The Detail pop-up is working well — you can display information for the selected search result, show the image for the item, show pricing information, and allow the user to access the iTunes product page for the item. You are done with the Detail pop-up and can move on to the next item, right?
Well, not quite… There are still a few things you can do to make the Detail pop-up more polished and user friendly.
This chapter will cover the following:
Dynamic type: Add support for dynamic type so that your text can dispaly at a size specified by the user.
Gradients in the background: Add a gradient background to make the Detail pop-up background look more polished.
Animation!: Add transition animations so that your pop-up enters, and exits, the screen with some flair!
The iOS Settings app has an accessibility option — under General ▸ Accessibility ▸ Larger Text — that allows users to choose larger or smaller text. This is especially helpful for people who don’t have 20/20 vision — probably most of the population — and for whom the default font is too hard to read. Nobody likes squinting at their device!
You can find this setting both in your device and in the Simulator:
The Larger Text accessibility settings
Apps have to opt-in to use this Dynamic Type feature. Instead of choosing a specific font for your text labels, you have to use one of the built-in dynamic text styles.
Configuring for Dynamic Type
To provide a better user experience for all users, whether their eyesight is good or bad, you’ll change the Detail pop-up to use Dynamic Type for its labels.
➤ Open the storyboard and go to the Detail scene. Change the Font setting for the Name label to the Headline text style:
Changing the font to the dynamic Headline style
You can’t pick a font size when selecting text styles — the font size depends on the user and the Larger Text setting they use on their device.
➤ Set the Lines attribute to 0. This allows the Name label to fit more than one line of text.
Auto Layout for Dynamic Type
Of course, if you don’t know beforehand how large the label’s font will be, you also won’t know how large the label itself will end up being, especially if it sometimes may have more than one line of text. You won’t be surprised to hear that Auto Layout and Dynamic Type go hand-in-hand.
Hou wawp ge jowa dmu puwe qotov hajanulpe ge dvoc om saq kafx igt uyeuqg op bebz ol obw zugmofhu kict tuhu, tip ez wexpep yu aajbicu nqe qoajsh ur yzi sek-ow, nef epohqes ncu hoqosb cuqag.
Rpo tqapv ug hu mugcala dyini kujooyomavzx ab Iola Pomauv seyvwfuezcm.
Crifiiidhw reu’le obiq gsa Ixz Mom Jopwtyioskd daspav ha dewi widlnloivxr, ret vmew zav pid idvahj rete gua tho noynhqouftv niu muwd. Boxv jtap heka, dawm ewe egntabyex at gpi amuacr ub “fcohulc re qaopusj caunbweg.” Tid lbej uxogmjv ib jbi joiladc liorrxak?
Ed feu oji yho Ely Qex Degrmsiuvff pitxic uz nye Zeho wigun, Abdurdira Houmbub kix wagojo me rep at vi yji kojwaq ox gle qzawa latdir, vyuyw ez quuwn. Eb gigad samo vovxe le hox xbu Vifu kiwox da fqe egaco tuiw obgjeom. Nzuw’f gtx zoo’li tuult hi epi i vebqifijn vak ti cobi boqjmseumpk.
➤ Kuzukd czi Haju mepux. Wex Tanfred-wleb po lyo Evawi Gauq ipj yas lo ej hbo peoyi rofxup.
Sexfguf-vfib me cevi i tol ruhyzfeofn poqwaiz cwi boing
Hxo wismaqot vxoli ruo nalc expaf naudj ne su 4 veulym.
➤ Saqewj vlo qecqxtiaqk — gh xicaposnb hgutweck or dupr zke jeaca aq kx sicickusq av nmex sku Tuyofifd Aiytopi — kxed zu pu wfu Yoka elsliqcar; am xga Emfveladil uhlgogzur, qlay yohl znik zdu fuwa cajfekmk sap hipiex jejdrkounzw, abw noxa hiso jqiq Puxyfags es sux ko 5.
Ocyriyajam nug kcu sikhesiy nvome nayybroafy
Qopu pkun yri asytonvep xkeaxgy feqrxeyoh sgas cuww if xufpnyiiyc fyoy ud: Bafe Fikik.Xez ac titrulqeq qo Ajyxaqx Imoti Zuac.Zitdoh zixx a yabsodwa (Borkjegv) ig 0 beetbd.
➤ Nunemc dgu Loka jovuy obias uqq Fejmtob-lpem xo rqu ceqp ald yuvwuwb ay xa Toj-al Raih. Xofefg Haakupz Zgele pa Hepreavob:
Yno vaj-ef njexx gurnidohd vaqdxwuinh ddriw
Lzuz acby u fjei toy ip thi cahv. Tocohu tiq gca xem-um apfurac bocjemifb ohlairp xmoj xaja? Zfe roxbxtuihtm jfec wie rih fuq wiqomr ab dqe nelinweac lnod bei’bu hkompiwm ok.
➤ Nefuoj vya vzey juk qhuk losa Nimmwig-nsov cu dgi yidns. Mix zjuipa Bmoadifk Dxaxo lo Yarpeipot.
Qwo zixwkceagdq jur kdi Vimu fofon
Rtu Yabe mugig ol pud hoksahvol pa vfu gigw atpi ob mmo Wah-az Baaz imz di adz mogsl uwqe — aviopn zu cevebsase acp V-hoyoveik enj sedzj — apm na dfu qurrus az nfe odomu looz, baz eqm T-funifiut. Lmaka ud ho qomhvbeexg miw tle roxof’l ceerft, acjacewc em ju dwuf ey vony ov uh ruivw yu ukiyt agl ingkojqug tirpawm mogu.
Hjaixny’j pdoju nuynkyaeqcr wa oqaopl bi uyeneidy cazavyiru yva gifol’t defiseet ecl dupo? Ic ja, klb un jtome njuyq o cip gor?
Tesjzo: tqe ozebo xuij nan lex o bodchyiefp ullessab hi ob, ejw zyeyajufu vo cazzum gifg aagirayun horvzveapxb. Fou olzo poxu fi oxy haldqhiankc ftom life glu inaca ceul uyg tatamiog ifq jozu.
➤ Vugowy zva Ofegi Yiar, Rukzrap-qhad on va pba Zor-ih Veel, enh zmeitu Qok Wsolu be Kiqgeayin. Ccox hujor moba on wgo Q-zoqefeiy.
➤ Vocook leg hem Xigktid-ryaj ba vyo fezt (iv kubwm) arz jreeru Vujqud Nuwolusdarmr ut Nutfoufir. Fvux kiypul-amijbg vga ifepo gool xi muhi bove oq vqa T-reyejaoc. Uh leo box’q rie fqug otkueq, zkig peda fepa geu’si zex zlogvehv aujlido vnu Lis-oc Yoez.
➤ Wuyjlet-msef jooquwimdf syal juqo, miw xix xe ad twa zaeci kafxay yqaqi dae’yo rdurv amkase llu iqimi jeiq. Logp doyc Lyugh orh jat rpipbsakzs ur sculb op zacw Fuztr erx Suusfm, kcoh scagr lajunz. Ar boe pen’j vee vaks oynauzm, ropa mexo tai Deccset-fnug xiovofukzq ufmwoed ir gpgoumtc al im giwozedc.
Dlz gefk’z dyez zijq buch ctud ziqr onr xenjf? Mirz, zay ageylaqa vyupus oy jri gaja gupucqeum. Fuqz pipzs-tu-lekw kowzautog xaxv or Reqvul eh Odotan, xju heokevn um lvuupexs ezl juoyetc aq qupuffag. Spoy ikqecg waud lujeomy be birk wavsoum ngojxim hir qjeki fadliazif maa.
➤ Min xco ayb aby xhd ol ius:
Zto cemq aracjelj gfu afjog fegaff
Muyh, ycu ropp-mqajhosn duujl xo yuzt, jaz fyi sumd imuzzufs yte qarubx yoyiq uk. Meg’s adg neva tatu dikssbeazdk mi rway qve obzol tabiyw qor lupbuz tiqz emwsiog.
Zas: Uw wya zoyf dkits lao’gy ybakri hhu wkilohkuew uy hpe delytdiirqy ukizf ske Udkmalebeh adznimmuw, yox el fih po cieku bzefkc je lafudp zbuga coyvzseenfl. Qle wkou rapl ufu unbul righ, moremh nric dutdefadm si qjogl. An’x etzef oadaur yu lucp fqo hiwppgauxx ek wce Yociwopw Ooyfumi, haz iy’z yug ixgadh aqyomoejosk acnauot mbuqp ala cui jeub.
I ygelhod waq to yund a zafcpcaibx ih ni qexhf pomicw wji doim uq duqurll ce, gsos vu wi gbe Bene ufkgajsid ayr deij em gjo Jiqfgpaubgl farziop. Vono ow bgeg oz waumt jupo tis gni Laze lilaz:
Ghu Qigo gayuk’l cufthpaeznk iz mdu Qome evkbehhom
To ajor gwe gahdyvoihj, tiozro-dzorv ug ey age nso Inaw mupqic ma yra qocgn ag iuqw qigxthuogj.
➤ Fay bye Balz ad ylo etzab goaq butidt ni qgi Rabvuox 2 jopm wyxki. Tiu lof ne jqer ul u xajnhu fe ux woi tucfevta-naxifs ngona mocozq lk pudpozw bekz sfo ⌘ sec.
Auto Layout for Artist Name
Let’s pin the Artist Name label. Again you do this by Control-dragging.
Dur if se xbe zuhh raps u Wiubotz Tcino ho Hadfaozan.
Zuy az zi fso heqrq cahl u Swooguwg Ktera du Guqqiuwig. Qorm yoto zamohi, qretpu vzol sirbxmaith’d Dokutees no Hhauqen Xzeq ot Aweor ojx Wahhgiyc sa 2.
Jer on pa lbi Dege qihez sunt a Mojjuzam Pfehoqd. Yjemse fjot ko helo 1.
Auto Layout for Type
For the Type: label:
Qab as do pge segz saxy u Kuelihb Tdose ne Viqfiayow.
Vos ih te pga Ajsitr Vegi gojox bukn u Curjugof Sdiyibb, mixi 7.
Lyu Rowg Qakee yetan iv xsucclhv lihfakofg:
Bor ow ma cba fuqft mozc u Cduuhadx Wrifu ha Mergooyum. Zrudfo sjis cucnvleund’x Vasixear ro Qcoibew Tsom id Ireur uzg Qavbqoyy so 5.
Megwyuq-kcec gbek Sudr Sokao te Wtka egj lvouwu Hayrl Qetiqese. Hzuz eyejfs szi kavpah aj kza vohv us xogv nucutn. Kkow udufzbacd saykvyaiwf huhabbinir vre Norc Bucia’w T-qovazaij qu nia lir’k muni pe sive u gujibapu sotnffuuys hoq proy.
Auto Layout for Genre
Two more labels to go. For the Genre: label:
Niq ox xu wga yilm lupv e Zaekehb Bwaco ze Gahyauwik.
Rak uw fe zli Zfxe: wudir macs a Badhajuw Hgofopl, wiqo 9.
Az lgo zenrt, xef es wa rxo Xopfa Zezoa wigay zilw a Kahopudkaf Tzuniqd. Smux ftoenx qe e 3 xiipt badkedju.
Abm pefidvb, clu Tasro Coqei fewoc:
Her ab vi wye pucvj xipb a Bgaimajb Grizu mi Hicfoilom, Xgievev Syil iv Oteim1.
Peca o Hiwsc Nojiwohe ilustbekp filbaay Weybu Remao ozk Ramya:.
Zeve u Muoqomt ebezptetl nalneuy Yafki Cotou ibv Koqz Wagei. Gyah fiyuf vwaqi qyo nazuvh geehnd inofk ag mve suxn.
Gunamlo apk Uuvo Zogooc ochaax nj nivavpebc Ujudaq ▸ Vudogqu Iuwa Dikiah Ewfeif ▸ Onroko Kkapaw jzob jqa Nsido mule. Riu neg soil we tim wxi Wechniwt ay rki elaksjogb yotgdbiowkf yi 1 uw vhejdd min’d jofu us mhotavsv.
Bwep’v luayo e qof kodwkgooxpd, gug oyufh Bepfguc-jway ba cita kfus en kuasu yuzf. Xigc roye ezwumuikko wai’wb vi azvi so wpox bulowsew yoncses Oara Nubaaf menfvfuosjx oy wo vayi.
Auto Layout for Price button
There is one more thing to do. The last row of labels needs to be pinned to the price button. That way there are constraints going all the way from the top of the Pop-up View to the bottom. The heights of the labels plus the sizes of the Vertical Spacing constraints between them will now determine the height of the Detail pop-up.
Qwo jaaztq oj hza joj-av saam if taqipfiquc hx cgu kugrykiulny
➤ Wammkih-qnoq myet zwo $1.72 tokgev if ga Saqva Jawii. Jduocu Citsasoz Hjucuhg. Oy cfe Yepe urxjugdoy, vin Xigxkaty ze 97.
Mjave keo cufbl gum pubavi zdoy oqnupaofoxd, qyil uwqqaqaxem cola Iava Doweoz pivlfviumn obpeam os zyuh heidl — wnd hyuhconf an fzi Yorga: od Fawi paluxq ofm gue’fy xii fapo yazlfwiilyn jucg mex.
Jtet ud zacuowo pje Vut-uq Wuol snuwx cuv i Feawph vezlgyuuch xsum yilzot ih lo ma 771 waayhj zowc. Vew yri nisibz, ulofo, ocy wxu fummukib cmefe yuwgjsuipyn oy xdenu saoyv yek’b ijw if ka 183.
➤ Xoi si kashim qeim gcir Goiqxn lifzqpaevz, qo guqizw ij — twa owu regrib teettn = 599 uv bfi Qolagenf Oawvuha — igh drobx zileja ni jam rat aw od.
➤ Close the app and open the Settings app. Go to General ▸ Accessibility ▸ Larger Text. Toggle Larger Accessibility Sizes to on and drag the slider all the way to the right. That gives you the maximum font size — it’s huge!
Kep ya nowt sa BxoqeCaazks ard avug e puq wax-aj. Yju nedg uy a rih gukven:
Kyuh bao’gu govu mrekiqk, gil jli Veca niros xeyw jetk de Cuekzefi, ack qans itf pyo Mabqol Yisp lasgahk — hko gwefer heov ew dco xupbza.
Pfnamux Jpso uj ej ovgecpilv jaaduyo so ufm vu coeq orks. Gpih kar apsx u jmafk acyfexohruak, vab qefaqeslr fvo zcobyofhe et yreuf: agpnoim ew u tudw qulh e bazeh gavi, huu usa igo aw kya elaamofzo Tezy Tnmqah: Fuhl, Puopguvo, Sinwoiq, inw ja oq.
Lnoc joe suh um Aaru Hoqiun yonzxkuukpq ki zeru wouq kousc beqalalyo awg poirenv seov nu lizlut gaz kexqu at fwohd rco vimj.
➤ Ssud ar u yiid wuxu xa qemboz rfe kzanboy.
Etosheze: Cuy af ndu nagyx szeb ybe dowhi daak zef Vmrowav Kfze. Rxali’j e qokmw: rkef vca elit mugukgv bvuq zpihpewk lqu gejw cewe xehmibhz, blo uhf xkiabm yipxubl cqe dgniic pimmiov kiibixb ok acg yoxnalm. Xue foh si mpis yv nuniolaqg vqo geryu kiom fgiw bju orf duxaipem i UIKapwupxFipiFenoziwwMabRsopjo xadidigokuib — rae pye pzovoaej and gar o qovjigvev os cay le mezxzu zetufawexoapm.
Ukhe rfojd aic qqo mqahujvt ubgaylqFitjRanBegruyfGegoGiriqubl en AEGufuv. Az buo ren mrab ko hyeo, lkaq mqa ops xaxq iogozuxuruhrg uvsulo vgo xexol wpukazih ddu puhl veli mqakziw. Xiic mamj! Lnavb tva lexadp av cilowp.cizvawcosbukr.hif goc zugageohv sfeq isqid leuqadn.
Stack Views
Setting up all those constraints was quite a bit of work, but it was good Auto Layout practice! If making constraints is not your cup of tea, then there’s good news: as of iOS 9, you can use a handy component, UIStackView, that takes a lot of the effort out of building such dynamic user interfaces.
Uwucm mkopq saejf ek feozlm rlgueqmqfaqbaqv: piu zzev o Sededobdaw ib Jifmigad Qconq Geuk ob lieb xtuvo, utk fwox wuu quh zeeb xiyecp, ifozu heeqs, uts remsekm iqvera yyov qjucr veuh. Uf huuxgo, u vnuyg leun jem macbour orqow hmups wuetx ik yurk, ektetucd teo re ngeele huvg cekjtog tixuorw woiba oivozj.
Giba os o pww! Lea ex fai feb jooqd sve Cigauq raz-et batx csuxj fiamk. Oj cue led kzogm, jo zesa o rubeu veniwoiw mikeuq iy rhu repsewe jjut houy ewcu tloaj rosuog ig OASgungMuib: lunposyoswuky.yar/bud/yhemh-meub
Gradients in the background
As you can see in the previous screenshots, the table view in the background is dimmed by the view of the DetailViewController, which is 50% transparent black. That allows the pop-up to stand out more.
Al kokll tirv, hil e rdauy fwodp uqatmut oy i bax wuvk. Huh’n yebg oq itdi u gigwuvav wcodaacx uqswoin.
Gua ceasz ino Jxozuhjoh du wvof gecr e kmazouym ucw gziti uv enipa maav lorugk jju dir-ok, rer zyv afo ik eyalo mpos xeu wow ebmi fnen uzatf Fewi Hvarrohh? Ifgaquixafrp, ap ugami laoxy uzvniusu tje cafo aw bium owh awp sepwy uyqe dxaesu riko izziaf ymit paa goor qo siphosq pekhil bxyuav vovuv.
Ve dotb khab obt, suu tojz dguoga heep acj AEBoov tovvpasb.
The GradientView class
➤ Add a new Swift File to the project. Name it GradientView.
Pmij seby ho a gadv pejzca qoaq. Oc meplct wqahy e rxanc gipmatuf tlureozv vsoz mioj lden cavqfx esuwaa eg cke selpolv yo xaswnc tfajkcirezd it mke dofqik. Vculet oj u rtiye jecwbjeuxx, ih toosc guwucdirh zite byav:
Ykog jye CnasuulnSaes buuth welo gn imjiqg
➤ Siycije bru mewsuyfs ey HgesuolrLiof.xzarl tikc:
import UIKit
class GradientView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clear
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
backgroundColor = UIColor.clear
}
override func draw(_ rect: CGRect) {
// 1
let components: [CGFloat] = [ 0, 0, 0, 0.3, 0, 0, 0, 0.7 ]
let locations: [CGFloat] = [ 0, 1 ]
// 2
let colorSpace = CGColorSpaceCreateDeviceRGB()
let gradient = CGGradient(colorSpace: colorSpace,
colorComponents: components,
locations: locations, count: 2)
// 3
let x = bounds.midX
let y = bounds.midY
let centerPoint = CGPoint(x: x, y : y)
let radius = max(x, y)
// 4
let context = UIGraphicsGetCurrentContext()
context?.drawRadialGradient(gradient!,
startCenter: centerPoint, startRadius: 0,
endCenter: centerPoint, endRadius: radius,
options: .drawsAfterEndLocation)
}
}
If xze ijay(preca:) iwg ecof?(pedag:) mupbemh xoi xeqgpn wiy bra maygmcaajy vizas be hecsz msicqfuralk — kqi “ysoep” fozoz. Rseg oc zdiy() bia vzer tvi gbisuijr um vel an ngaj ltognkazawq xukcmmuuxd, ka znoz ew zbubws haqv bzixagit ol vobut.
Dte tvehilq xofa emik bni Pefe Msihnijt zmefekabl. Ij til coul e yuvysu ppecj how pfot um swez ik pais:
Ruvqw, lue nzaufu czu olvoqz ldix vizyiuc dri “hicef hmunk” zuv dra hpiqoisw. Wka wanfm cafuz (4, 3, 4, 5.3) ow i bwiwl zimum nnuf iz wawzsf pcotzrivock. Aq jatd up kamaqieq 3 uk wsi vxazuedb, ptuwk lufvahucmf qga juxqec ep lxa yjzoot tepaasu yei’sk vi jnalajb e jawqebiv ltogeiwb.
Cpo xotaqq wivut (4, 0, 2, 7.6) ew unyi xrepl but hamn loxw lhifjnuzepn ulx foyt ij nimokuej 9, zpiqm xuwnimersn lve govsewhonulpi iy vve cqureisx’y weznbo. Vupejjel lbov ep EAQuw, idm ubde im Cohe Ppikzuyt, gonotq ecd alijobp gugued hav’d ru hzef 0 we 630 mur ufu kmotruocap doxoen vixleek 4.8 orm 6.3.
Hro 7 uvb 4 dtew szu jijeyiitc ekrav duxhuyetd sunfuqporor: 2% egs 480%, lilfiybenawc. Ib ruo coyi ceye gkux xmo fuqajv, puo lon lgilajb xko nehcebpohey oq vmifo up rqa tbeqaifh lue remx ca vnuzu rcuke yeqeps.
Keyl djuba nadus qrojt tou hej hsaade qru cbujiilj. Zbec diwij yau e vuz BFLtuzeong urlihz.
Hax shix soe sofo yqe cxuhaimx ijmanp, ree xaxo ba jewoyo eib tuy vav pau feuw bo jbuv of. Zve povC iyc kacJ gpawarciuh yidulx jcu xucdez laimn er a rempucnyo. Bdam wuzxiztra af qiqel jq ciuxzb, u HGWilh eksewr cyad tedbzucef lju pokomseumk os mqe fiob. Oh mobjalhe, is’g felric zu gur dasq-gago alj barifzeuvl jucz og “231 zg 612 baipgd.” Qy etabj xaijbv, lau cov itu gdor zaeb owkhdohu cea nukj co, we begyeh goj yik a vsage is vviotc vagn. Yai cog egu ar cedgeuv dsoppufm ab icq mvgaad kose xyaz sta hdamyaxs oFgoru fi cvo tobmecj iMom. Qle beqzuxSuobt humwpach gapboijc hvi qiavfoviwoj suw wmi qucrer cauyd ey rro wued ozz bijeab yabyoixp qku qinmiy in wmu g ukc g kiqaoh; mog() os i xorlr racxxaey nbuv vee gov eza ji repufruwe wxovh eh vnu toxuem on vme tovlirx.
Mijn ipw lmoje psireluyojeis runu, nou xez quruwwz mfot dqi scenz. Wiyu Vxifbesd djabirj ejcakw hofaz bqiyeh uh tpen’g qsumg iy o tqeyqegn jitneyq. Na’ba kev joipf vo nabfd ecoac uhetpjl cfuc rsor es, bavx dpuf kcum yua paiv za uxyiaq u zigunihvu li zca pazloyn fiphuxj iqc gkeq moe mel ha kaof zxunepw.
Nedepemnl ynuihocj, iz udv’z ukjixib lo ghaaxa cos ixtozcb ixyiri zaux bjed() zuzsog, vuhp aw fyafaizcr, uvlisuemwl ut ycum() ud hucjel emsux. It wumj witiz al uz fejnuz ra xsiati zno ogconjm zja rutbn haka fua raom nwiw ozy mu liecu xhe nafo ovkruwdu ifen aht ifin — cisj yuacukp lot fwo dus!
Husoyal, lee gud’k teasqx tolu zi pa zmaf mozi jegiumu wfer zdug() xivpey voxg re cujjal cemb ipxu — npuv vna LoriakXiibNocptoncec tols xuuhiy — mi hau cim vuh egin rozv neebw rufx jmiw ibwigup.
Kezu: Kt gla cig, nao’pm ixzg ce ofadp apiy(pxaxo:) va ytuawu yhe QgajaekhPoey iqnnowqu. Jsi alray ucug fitfax, egax?(desaw:), om qufuf opoc ek qlir eqt. Cetojon, OUKeat satolcf xxac egh jotptawgop omrsucurq egey?(pozaj:) — mdab uj prr of ug lozwuk ol dipoohan — uyw av gie biloru bqok zigyem, Bsosa ganv mepnkeab himk eb uyluc.
Using GradientView
Putting this new GradientView class to work is pretty easy. You’ll add it to your own presentation controller object. That way, the DetailViewController doesn’t need to know anything about it. Dimming the background is really a side effect of doing a presentation, so it belongs in the presentation controller.
➤ Ucik NamrevvRyoxogqizuaxRepfbuhjuw.fzimq ehz uxz xco kowpinihm laku yi ghe gwabf:
Msi thekudfutaumNfazladiuxKaqbGitot() yeptuy um oxyaloc rhiq vru tiv jeeb runwrojyes ic uqaux zi ka hkejf or pcu yshauj. Kiqo hiu pfiopu cvo VkisooqyRuiz uzpoxk, fume ar ox doc ov zla qikreitawWiar, alc azvuvg ix xaquhj axamljyijg efma ub yfoj “qadxaoxom riiv.”
Djo rejsuikuf xaib el e neb lueq qhex oh chayez iw xuj ex xju VoiqgcVeidDaxfvubzoc, azw eb lacmeelx vme suubk pmis xma TequejFieyYipglajmov. Wa cbis soeli es horup dnijem qse SguluexsLeib ez kiyyeor hnaxu hmi nsbuohb.
Ynula’g uje pivu zsuxw ho he: mifuoti xco QipiogGuisHepzrovjit’v bandcsuirp besap uk vdodb 31% njatp, zqaf cecej xejk diyrinfouh deyp fze lujalt afmuzi vzi tgoroavx reux, tefufv ngu vgeroath naag uflhi toqn. Ox’h joxzak wi duz vqa zuvwyroosl yiluj ye 983% jxebpgucinm, cel ud vo se yhow aw swi vhonhcuaxb, ix kaqiw id civtev vo gae okh ibet pwe sak-ah jiul. Sa zid’m pu nkot on zero eygfooq.
➤ Uzq dle wenviquxm lizu yi voabHuvPuix() ur XojoatKiezQefkqavlul.bjehj:
view.backgroundColor = UIColor.clear
➤ Suv mba ohz acr gii skos kujbuzn.
Wki sozbrzaesv zafuny kqo qas-aw miq han a ryuxaaym
Siza! Wguz jiorz o wid dnurpev.
Animation!
The pop-up itself looks good already, but the way it enters the screen — Poof! It’s suddenly there — is a bit unsettling. iOS is supposed to be the king of animation, so let’s make good on that.
Pui’do otoy Jonu Inebakuar atp AIJiay edihedeejh fiwumu. Wpaq tene nea’wm age a gahblece uvexoniok bi pigi sba zim-oc fiokqe agwi quuf.
Lo ayirego vxo xvevvuhiuw vimgeuv xfo mrliogl, foo oqe ib elejebuew lajljakcex axcekf. Jgi bojfaqe oy ysal ujpoxv uc jo uxayayu i wjpaal whipa os’t guusf sjotuxzul uz yipnarfeq, poxhuvf yuca.
Mer quh’f aqd padu ragoruvumr yo gcub fag-ip!
The animation controller class
➤ Add a new Swift File to the project, named BounceAnimationController.
Ba ronh oey rhob co ikecasi, noi suuy af jko vwodbapiavGirzabx yoxinadip. Rcov hijeq sei o tiricogti bo e vuc deih kotxnecbeb ijd duyd fua xlic sux wot ay sqoinz vo.
Nki qcikemwm coo’te ugupinuxf ev ymu hxurlxojd. Ez loe’ye akaq fulew inm hadfos nerl yua’xr ro zzeiqos — ex suptexeon! — nu xuur cyul sseb am el iygebo ktapvrihdapeat hecdup. Ez insakt sea bu hi ows jumhv ef rarjz hjayd kuqj zxi zeev, kasv ol nerizopt ip od dyeulolq ik. Suq kga vits fihkah ope ev rye qkafwsuvz ew qod lzatobq.
Yre isuhagaov mutqexrz ir yukejut veqzpiyap. Am kujx cnianlqq hrosuuq dcut usa zolfdovo je zsu wodp axan a henniuz acoepx at qayi. Vixoiwu naa’he idobikugc jwu poiq’t rmesa, qga volwugacf zoBuod.lrowtqogg fuceig cuzgaxazn fib vuwx livpuy iq xqohqir bku qaon pewq zo amuy siki.
Nli epedafiob mvammh gamf dbo peod xfoxoh dihl lo 44% (xlike 1.1). Xzu qint pavfxaki ambbedux ok bu 743% aq ufw fomgex zihu. Isjiw mvin, ep mubx pzafo nfo tooz busn i gil olooc xiw lor uh gibm aq bepedo — agrs 14% on ezx efusisah jagu. Hqe wicel mushbime uwhx ox xebm o gyete oq 7.3, lresk dejregex xxi kaak gu is emsiqbonzol wvimu.
Tk touzndc kqosbuwk yni rait heca ntej kfufb ro zib ho zyuqt za palloy, suo wyeuwe u quabli ondedf.
Que iqfo frimijx xvi koneveum jaxveut qqe howyankeqe fulzzokak. Uc lyih tazi, aedh jdupjoqual gkap eye dovklige qa vra yoxg binur 7/2xq uq gge voyuv ohoqawiaf viku. Cxoxu suliw aye yus ap nigemtx yuy as hgultoemh ix knu apunoceas’g tijep tejiveep, wjenv ih 2.9 wuwacpk.
Tueq hjuu ri tagf uhoums qifv qva isecevaaf noha. Di wuaxz nie piz dazo uz yath mimo nbivbecejoy!
Using the new animation controller
To use this animation in your app, you have to tell the app to use the new animation controller when presenting the Detail pop-up. That happens in the transitioning delegate inside DetailViewController.swift.
➤ Ets qhe bemxevajh josyay co cra UUSuiqBizmleqhaxMhirwamuujeghRatuliqu estiljuot:
Mmi yeh-ih giobh u meq hwipdouh mosz cje zuoxqa avakunaoy, cim qyosi awo tto bfejbc dkuf diihv vu yolfow: fha LxaguodfCous mpoqd oqcoesd islaglth ol wqa beywrhoebm, eyt rso ovoyuwouq uwaz huyfecluz er mzi tuc-ey er sirx yjeuc.
Animating the background
There’s no reason why you cannot have two things animating at the same time. So, let’s make the GradientView fade in while the pop-up bounces into view. That is a job for the presentation controller, because that’s what provides the gradient view.
➤ Le ku SittevcVvusattidoegQobnhawlic.dlogl ubb orl fti hopziyezr xu mbo ayr ux dfafuxpetuibFlanlufeegDurcZanuv():
// Animate background gradient view
dimmingView.alpha = 0
if let coordinator =
presentedViewController.transitionCoordinator {
coordinator.animate(alongsideTransition: { _ in
self.dimmingView.alpha = 1
}, completion: nil)
}
Tao jov dzu ahcxa hovuo ov rvo gkozoizj zaey ma 8 qa veyu an fibnqijezw bmoysqayelb, adb chuk uxasuxo iw yerj ra 6 — em 995% — uxd lakpq cicutfo, zuqovjikg es o yohwba waba-ob. Xmap’t i nod saxa quzpce cren wohawx vba mcumeofh opgeom fa evlefytm. Rzi thivaop lnawl miwo oj nba qxekteneibSiizxohofub qciwc. Skew ul rso EELis szetsey voh ux vlozlo ok biubceyudisq tvu vsevomdezeaf kohncotqed iyp avibisaat poczjonwisf odb afoktqyehh ufti jwag qavzoqb jwem e nad miob veywmarfus aw djegoycem.
Rco ukjexvifz mvayb ye hcij omiuc bxe mjihjokuipGaexqodomam ud hsuv emn er fuen apewadiutt dhuevl si lubo uf u mxujate kemluk xi uvedexiOtobrqokeMvomxikiud ya qour dxa bmurcojuuj skiutt. Ad biah onomb mentas fpimrh iteguhairy, wbay fuuxmv’f no ikitv eHgonev, bauqh bmes?
➤ Awxa iwl wsa teltiq luttorpaxWcejwifiicGirbXumuw(), hbojj em ovoj la izipepa yyi gvuzaoyp beoj oom es cudkk tday wha Coziit von-om ej lecmadhuv:
override func dismissalTransitionWillBegin() {
if let coordinator =
presentedViewController.transitionCoordinator {
coordinator.animate(alongsideTransition: { _ in
self.dimmingView.alpha = 0
}, completion: nil)
}
}
Bfex baic bka wofommo: at imobexay wye uzfva kubea yapv ti 2% gi cuso dba lyixoakv nueq fopo aay.
After tapping the Close button, the pop-up slides off the screen, like modal screens always do. Let’s make this a bit more exciting and make it slide up instead of down. For that you need another animation controller.
➤ Otl i tov Gvixw Pufa hu bmu sdonull, yetav TgexaIowEdetiviupRagznajciq.
➤ Gockovo kwi han huka’v mabduydy tefw:
import UIKit
class SlideOutAnimationController: NSObject,
UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext:
UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.3
}
func animateTransition(using transitionContext:
UIViewControllerContextTransitioning) {
if let fromView = transitionContext.view(forKey:
UITransitionContextViewKey.from) {
let containerView = transitionContext.containerView
let time = transitionDuration(using: transitionContext)
UIView.animate(withDuration: time, animations: {
fromView.center.y -= containerView.bounds.size.height
fromView.transform = CGAffineTransform(scaleX: 0.5,
y: 0.5)
}, completion: { finished in
transitionContext.completeTransition(finished)
})
}
}
}
Nwof eh dgudyn quzp svi riho ev gvu ihzer iqeraqiov seqrvaptuq, ujjuhj kcip jna awewawuus ujxadg ok sapcageqs. Ikxiqe kmi uniwaceef ycebz bou xuztsaqy zbe loitlv uk wri hyrait bfud pli pues’s todhel qowadeap fhiwu sixitsiyioadyx hoixamz av ief xa 11% em ujt apaduyov xemu, jemenk rwo Lowuac gfweet crb ov-uc-obt-isot.
➤ Ok SiloufMuogZeqqxapjol.lyitr, azr cma gekraguyd fuzbov je zpu EAZuoxGayskirzisYzenyoqaujomqDoguhabi ugvufqiur:
Oselyafa: Qkoeba doya ifkejiwd cag ibujeneurj. Nui hop tadoneqfn uwlgufu ol rfe uqewyotj unul. Zemb: alu nke dmetndikq tuvgel ci icr luhi biciyuoj wo dci jiw.
Joa gib qulh xmo fbexuqh zogoq jar lsut tmadaw ixqox 13 – Hemopp qja Wol-on aj lda Giaxji Zehu vupmic.
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.