{"id":4938,"date":"2010-11-04T13:21:20","date_gmt":"2010-11-04T12:21:20","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=4938"},"modified":"2010-11-04T13:21:20","modified_gmt":"2010-11-04T12:21:20","slug":"t079-ottimizzare-la-grafica-delle-nostre-applicazioni-iphone-per-il-retina-display","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t079-ottimizzare-la-grafica-delle-nostre-applicazioni-iphone-per-il-retina-display\/","title":{"rendered":"T#079 &#8211; Ottimizzare la grafica delle nostre Applicazioni iPhone per il Retina Display"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-01.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-01\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-01\" width=\"200\" height=\"259\" class=\"alignleft size-full wp-image-4999\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-01.jpg 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-01-115x150.jpg 115w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a> Con l&#8217;arrivo sul mercato degli ultimi modelli di iDevices: iPhone 4 e iPod Touch 4G, entrambi dotati dell&#8217;ormai famoso &#8220;retina display&#8221;, per gli sviluppatori \u00e8 nata l&#8217;esigenza di pianificare l&#8217;ottimizzazione della grafica delle loro applicazioni (esistenti e in sviluppo) per i differenti display esistenti. Ogni sviluppatore dovrebbe preoccuparsi infatti di far si che le sue creazioni vengano visualizzate al meglio sia sui precedenti device (iPhone 3G, 3GS, e iPod Touch vari) che su quelli di ultima generazione, che godono appunto di una risoluzione maggiore.<\/p>\n<p>Cominciamo con il dire (se qualcuno ancora non lo sapesse) che il Retina Display introdotto nel nuovo iPhone gode di una risoluzione di 960\u00d7640 con una densit\u00e0 di pixel di 326 pixel per pollice. Questo significa che se la nostra grafica \u00e8 ottimizzata esclusivamente per la risoluzione di 480&#215;320 (dei &#8220;vecchi&#8221; device), \u00e8 evidente che su un display di ultima generazione, il quale offre quattro volte il numero di pixel degli display precedenti , l&#8217;immagine risulter\u00e0 inevitabilmente sgranata!<!--more--><\/p>\n<p>Ora, non voglio certo proporvi la guida definitiva per risolvere tutte le situazioni possibili e immaginabili, ma proporvi semplicemente un buon punto di partenza, che sicuramente sar\u00e0 utile a molti di voi. Vedremo, con un piccolo esempio, un semplice metodo per ottimizzare un&#8217;immagine presente nel nostro programma e l&#8217;icona del programma stesso.<\/p>\n<h4>Prepariamo la grafica per il nostro esempio<\/h4>\n<p>Come ben saprete, fino ad oggi dovevamo prevedere 2 icone per la nostra applicazione, o meglio la stessa icona di 2 differenti dimensioni. Una, pari a 57&#215;57 pixel, quella che verr\u00e0 poi mostrata nella springboard e che occorre inserire all&#8217;interno del progetto e l&#8217;altra di 512&#215;512 pixel (da non inserire all&#8217;interno dell&#8217;applicazione), che verr\u00e0 poi inviata ad Apple e utilizzata all&#8217;interno dell&#8217;App Store. Oggi dovremo prevedere una terza dimensione per la nostra icona, ottimizzata appunto per i retina display, che dovr\u00e0 avere dimensioni 114&#215;114 pixel. Ovviamente sar\u00e0 conveniente partire da quella pi\u00f9 grande (512&#215;512) per poi ricavare quelle pi\u00f9 piccole tramite semplice ridimensionamento dell&#8217;immagine stessa, prima quella da 114&#215;114 e infine quella da 57&#215;57.<\/p>\n<p>Per quanto riguarda le immagini del nostro esempio, invece, dovranno essere presenti nel progetto in due grandezze differenti: 480&#215;320 (per i &#8220;vecchi&#8221; dispositivi) e 960&#215;640 pixel (per in nuovi).<\/p>\n<p>Le dimensioni non bastano, dovremmo infatti preoccuparci di qualche altro piccolo accorgimento. Vediamo di cosa si tratta con il nostro piccolo esempio pratico.<\/p>\n<h4>Partiamo con il progetto<\/h4>\n<p>Apriamo Xcode > New Project > View Based Application. Diamo un nome a piacere alla nostra applicazione e proseguiamo.<\/p>\n<p>Importiamo all&#8217;interno del nostro progetto 4 file grafici precedentemente preparati secondo le specifiche riportate sopra (sia le icone che le immagini), trascinandole semplicemente all&#8217;interno della cartella &#8220;Resources&#8221; in Xcode. Facciamo attenzione a mettere la spunta su &#8220;Copy items into destination group\u2019s folder (if needed)&#8221;, che far\u00e0 in modo di copiare i file all&#8217;interno della cartella di destinazione.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-02.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-02\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-02\" width=\"440\" height=\"411\" class=\"aligncenter size-full wp-image-5000\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-02.jpg 440w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-02-300x280.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-02-150x140.jpg 150w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Assicuriamoci che l&#8217;icona ottimizzata per i vecchi iPhone sia nominata &#8220;icon.png&#8221; e quella per iPhone 4 &#8220;icon@2x.png&#8221; e che le immagini siano nominate rispettivamente &#8220;wallpaper.jpg&#8221; e &#8220;wallpaper@2x.jpg&#8221;.<\/p>\n<p>Apriamo il file .plist ed aggiungiamo una nuova riga sotto la voce &#8220;icon files&#8221; per settare le 2 icone.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-03.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-03\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-03\" width=\"500\" height=\"379\" class=\"aligncenter size-full wp-image-5001\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-03.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-03-300x227.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-03-150x113.jpg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Salviamo il file plist e chiudiamolo.<\/p>\n<p>Facciamo ora doppio-click sul file &#8220;ViewController.xib&#8221; che aprir\u00e0 Interface Builder. Aggiungiamo quindi una semplice &#8220;UIImageView&#8221; (di dimensione che prenda tutto lo schermo) alla nostra View.  Andiamo a selezionare l&#8217;immagine da visualizzare all&#8217;interno dell&#8217; &#8220;Image View&#8221; ed ecco un primo &#8220;strano&#8221; comportamento che richiede la nostra attenzione. Ci accorgeremo infatti di una cosa:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-04.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-04\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-04\" width=\"286\" height=\"487\" class=\"aligncenter size-full wp-image-5002\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-04.jpg 286w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-04-176x300.jpg 176w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-04-88x150.jpg 88w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Nonostante abbiamo importato nel progetto diverse immagini, per la precisione 4, (2 icone e 2 immagini di dimensioni e nome file differenti) potremmo scegliere soltanto tra 2 di essi, (nel nostro esempio i file .png e .jpg)!<\/p>\n<p>Perch\u00e8? Dove sono finiti i file &#8220;&#8230;@2x.png&#8221; e &#8220;&#8230;@2x.jpg&#8221; ?!?<\/p>\n<p>Ed ecco che l&#8217;ambiente di sviluppo ci viene incontro semplificandoci la vita. Le immagini che terminano per &#8220;@2x.png&#8221; o &#8220;@2x.jpg&#8221; sono infatti quelle che il sistema sostituir\u00e0 automaticamente alle rispettive .png e .jpg quando l&#8217;applicazione verr\u00e0 installata su un dispositivo con display Retina !!!<\/p>\n<p>Tutto qui!<\/p>\n<p>Se da una parte avremo pi\u00f9 lavoro lato grafica, almeno non dovremmo preoccuparci di gestire il tutto via codice se non con questi piccoli accorgimenti.<\/p>\n<p>Naturalmente per ottimizzare applicazioni pi\u00f9 complesse (tipo giochi) che sfruttano magari OpenGL e via dicendo, le cose probabilmente si complicano notevolmente, ma questo non fa per me \ud83d\ude09<\/p>\n<p>Salviamo e chiudiamo IB. Da Xcode compiliamo la nostra applicazione ed ecco apparire il risultato sul simulatore iPhone:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-05.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-05\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-05\" width=\"396\" height=\"744\" class=\"aligncenter size-full wp-image-5003\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-05.jpg 396w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-05-159x300.jpg 159w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Adesso dobbiamo vedere se tutto funziona per bene anche sul retina display!<\/p>\n<p>Dal men\u00f9 del simulatore apriamo Hardware > Dispositivo > iPhone (Retina)<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-06.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-06\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-06\" width=\"500\" height=\"223\" class=\"aligncenter size-full wp-image-5005\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-06.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-06-300x133.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-06-150x66.jpg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Apriamo nuovamente la nostra applicazione e noteremo che sul retina display verr\u00e0 visualizzata l&#8217;immagine da noi preparata per iPhone 4 (per rendere le differenze pi\u00f9 evidenti ho pensato di aggiungere una scritta rossa nella versione retina, che potesse identificare meglio le immagini utilizzate nell&#8217;esempio).<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-07.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-07.jpg\" alt=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-07\" title=\"t079-ottimizzare-applicazioni-per-il-Retina-Display-07\" width=\"500\" height=\"720\" class=\"aligncenter size-full wp-image-5004\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-07.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-07-208x300.jpg 208w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display-07-104x150.jpg 104w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>In conclusione<\/h4>\n<p>Il mio esempio non risolver\u00e0 sicuramente tutte le situazioni, ma \u00e8 sicuramente un buon punto di partenza per cominciare ad ottimizzare le nostre applicazioni per i nuovi display!<\/p>\n<p>Alla prossima<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display.zip\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"\" width=\"33\" height=\"40\" align=\"middle\" \/><\/a> Se avete problemi con il tutorial, <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/11\/t079-ottimizzare-applicazioni-per-il-Retina-Display.zip\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con l&#8217;arrivo sul mercato degli ultimi modelli di iDevices: iPhone 4 e iPod Touch 4G, entrambi dotati&#8230;<\/p>\n","protected":false},"author":489,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[24,472,471,211,467],"class_list":["post-4938","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-interface-builder","tag-ottimizzare-grafica-iphone","tag-ottimizzare-grafica-retina","tag-ragazzetto","tag-retina-display"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/489"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=4938"}],"version-history":[{"count":6,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4938\/revisions"}],"predecessor-version":[{"id":4998,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4938\/revisions\/4998"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=4938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=4938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=4938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}