{"id":3680,"date":"2010-06-17T15:29:15","date_gmt":"2010-06-17T13:29:15","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3680"},"modified":"2010-06-22T10:05:42","modified_gmt":"2010-06-22T08:05:42","slug":"t053-trashapp-come-utilizzare-le-immagini-tramite-touch","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t053-trashapp-come-utilizzare-le-immagini-tramite-touch\/","title":{"rendered":"T#053 &#8211; TrashApp, come utilizzare le immagini tramite &#8220;touch&#8221;"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-13.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 13\" title=\"tutorial-053-iphone-trash-app-immagini-touch-13\" width=\"57\" height=\"104\" class=\"alignleft size-full wp-image-3694\" \/><\/a> In questo nuovo tutorial dedicato alla programmazione per iPhone SDK realizzeremo un&#8217;applicazione che ci dar\u00e0 un&#8217;infarinatura sulla gestione delle immagini tramite il tocco. Vedremo, infatti, come creare un finto cestino, in cui potremo trascinare un documento al suo interno,vedremo quindi come ripristinare il file &#8220;eliminato&#8221;. Ovviamente non andremo a toccare veri file salvati sul nostro dispositivo, si tratter\u00e0 di una semplice animazione interattiva, nulla di pi\u00f9, giusto per capire come funzionano alcuni metodi legati ai comandi imposti via touchscreen.<!--more--><\/p>\n<h4>1. Definiamo il progetto<\/h4>\n<p>Aprimo Xcode, selezioniamo &#8220;File -> New Project&#8221;. Nel men\u00f9 che ci appare selezioniamo &#8220;View-based Application&#8221;, clicchiamo su &#8220;Choose\u2026&#8221; e immettiamo come nome &#8220;TrashApp&#8221;, facciamo infine clic su &#8220;Save&#8221;. Abbiamo cos\u00ec creato il nostro nuovo progetto.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-01.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 01\" title=\"tutorial-053-iphone-trash-app-immagini-touch-01\" width=\"500\" height=\"368\" class=\"aligncenter size-full wp-image-3682\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-01.png 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-01-300x220.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Prima di fare qualsiasi cosa, inseriamo nel nostro progetto le immagini che ci serviranno. Io utilizzer\u00f2 le seguenti immagini: due per il cestino e una l&#8217;elemento da eliminare (cosa meglio di un logo di Windows? xD):<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-02.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 02\" title=\"tutorial-053-iphone-trash-app-immagini-touch-02\" width=\"128\" height=\"128\" class=\"alignnone size-full wp-image-3683\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-02.png 128w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-02-64x64.png 64w\" sizes=\"auto, (max-width: 128px) 100vw, 128px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-03.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 03\" title=\"tutorial-053-iphone-trash-app-immagini-touch-03\" width=\"128\" height=\"128\" class=\"alignnone size-full wp-image-3684\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-03.png 128w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-03-64x64.png 64w\" sizes=\"auto, (max-width: 128px) 100vw, 128px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-04.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 04\" title=\"tutorial-053-iphone-trash-app-immagini-touch-04\" width=\"70\" height=\"70\" class=\"alignnone size-full wp-image-3685\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-04.png 70w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-04-64x64.png 64w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Trasciniamo quindi le immagini nel progetto XCode e, nel pop-up che ci apparir\u00e0, mettiamo la spunta su &#8220;Copy items into destination group&#8217;s folder (if needed)&#8221;. Noterete ora le immagini all&#8217;interno del progetto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-05.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 05\" title=\"tutorial-053-iphone-trash-app-immagini-touch-05\" width=\"206\" height=\"72\" class=\"aligncenter size-full wp-image-3686\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-05.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-05-150x52.png 150w\" sizes=\"auto, (max-width: 206px) 100vw, 206px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Prima di definire la struttura grafica della nostra applicazione, andiamo a definire i componenti che poi ci serviranno. Apriamo il file &#8220;TrashAppViewController.h&#8221; e inseriamo le seguenti definizioni:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n \r\n@interface TrashAppViewController : UIViewController {\r\n    IBOutlet UIImageView *imageLogo;\r\n    IBOutlet UIImageView *imageCestino;\r\n}\r\n \r\n- (IBAction)ripristina;\r\n \r\n@end\r\n<\/pre>\n<p>Abbiamo definito gli elementi necessari: alle righe 4 e 5 due <em>UIImageView<\/em>, che conterranno il cestino (pieno o vuoto a seconda del caso) e il logo da eliminare. Alla riga 8, infine, abbiamo definito l&#8217;azione che ci permetter\u00e0 di ripristinare il logo dopo la sua eliminazione.<\/p>\n<h4>2. Definiamo l&#8217;aspetto grafico dell&#8217;applicazione<\/h4>\n<p>Procediamo, ora, con la creazione della struttura grafica della nostra applicazione. Salviamo il file &#8220;TrashAppViewController.h&#8221; appena modificato e apriamo quindi &#8220;TrashAppViewController.xib&#8221;, che avvier\u00e0 <em>Interface Builder<\/em>. La finestra \u00e8 per ora molto semplice e si presenter\u00e0 cos\u00ec:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-06.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 06\" title=\"tutorial-053-iphone-trash-app-immagini-touch-06\" width=\"400\" height=\"582\" class=\"aligncenter size-full wp-image-3687\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-06.png 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-06-206x299.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-06-103x149.png 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Inseriamo, per prima cosa, gli elementi necessari: due componenti <em>UIImageView<\/em> e un <em>UIButton<\/em>. <\/p>\n<p><strong>Attenzione:<\/strong> <em>la prima UIImageView che inserite deve essere quella in basso, altrimenti avrete problemi nelle fasi successive!<\/em><\/p>\n<p>Ecco come si presenter\u00e0 la nostra applicazione:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-07.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 07\" title=\"tutorial-053-iphone-trash-app-immagini-touch-07\" width=\"350\" height=\"509\" class=\"aligncenter size-full wp-image-3688\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-07.png 350w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-07-206x300.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-07-103x150.png 103w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ora dobbiamo collegare i vari componenti alle immagini che abbiamo inserito all&#8217;inizio del progetto. Clicchiamo sul primo componente <em>UIImageView<\/em> (quello pi\u00f9 in alto, il secondo che avete inserito!) e apriamo il pannello &#8220;Attributes Inspector&#8221;. Nel men\u00f9 a tendina &#8220;Images&#8221; selezioniamo il file &#8220;windows icon.png&#8221; e lo vedremo comparire anche nell&#8217;applicazione. Spuntiamo, inoltre, la casella &#8220;User Interaction Enabled&#8221;. Avremo un pannello cos\u00ec impostato:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-08.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 08\" title=\"tutorial-053-iphone-trash-app-immagini-touch-08\" width=\"301\" height=\"474\" class=\"aligncenter size-full wp-image-3689\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-08.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-08-190x300.png 190w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-08-95x150.png 95w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Facciamo la stessa cosa per la <em>UIImageView<\/em> sottostante, selezionando come immagine &#8220;TrashIconEmpty.png&#8221;, ma senza spuntare &#8220;User Interaction Enabled&#8221;. Inseriamo all&#8217;interno del bottone la scritta &#8220;Ripristina logo&#8221;, aggiustiamo le dimensioni e la posizione delle due immagini (in modo che i bordi delle <em>UIImageView<\/em> coincidano con le immagini al loro interno) fino ad avere un risultato come questo:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-09.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 09\" title=\"tutorial-053-iphone-trash-app-immagini-touch-09\" width=\"400\" height=\"582\" class=\"aligncenter size-full wp-image-3690\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-09.png 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-09-206x299.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-09-103x149.png 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ora non dobbiamo fare alto che collegare gli elementi che abbiamo definito all&#8217;inizio di questo tutorial con i componenti all\u2019interno della nostra applicazione. Dal Pannello dei Documenti selezioniamo il &#8220;File&#8217;s Owner&#8221;:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-10.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 10\" title=\"tutorial-053-iphone-trash-app-immagini-touch-10\" width=\"507\" height=\"386\" class=\"aligncenter size-full wp-image-3691\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-10.png 507w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-10-300x228.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-10-150x114.png 150w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Se apriamo ora il &#8220;Connections Inspector&#8221;, dovremmo vedere i seguenti elementi:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-11.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 11\" title=\"tutorial-053-iphone-trash-app-immagini-touch-11\" width=\"301\" height=\"240\" class=\"aligncenter size-full wp-image-3692\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-11.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-11-300x239.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-11-150x119.png 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Prendiamo il &#8220;pallino&#8221; che troviamo a fianco di &#8220;imageLogo&#8221; e trasciniamolo sul logo di Windows, mentre quello di &#8220;imageCestino&#8221; sull&#8217;immagine del cestino. Colleghiamo, infine, l&#8217;azione: il pallino &#8220;ripristina:&#8221; sul bottone, e nel men\u00f9 che appare selezioniamo &#8220;Touch Up Inside&#8221;. Se abbiamo eseguito tutto in maniera corretta avremo un pannello come il seguente:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-12.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 12\" title=\"tutorial-053-iphone-trash-app-immagini-touch-12\" width=\"301\" height=\"240\" class=\"aligncenter size-full wp-image-3693\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-12.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-12-300x239.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-12-150x119.png 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Abbiamo concluso questa fase del tutorial. Salviamo tutto e chiudiamo Interface Builder.<\/p>\n<h4>3. Implementiamo il movimento del logo<\/h4>\n<p>Apriamo il file &#8220;TrashAppViewController.h&#8221; e dichiarando un paio di elementi che ci serviranno:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n \r\n@interface TrashAppViewController : UIViewController {\r\n    IBOutlet UIImageView *imageLogo;\r\n    IBOutlet UIImageView *imageCestino;\r\n \r\n\tBOOL cancellato;\r\n}\r\n \r\n- (IBAction)ripristina;\r\n- (void)cancella;\r\n \r\n@end\r\n<\/pre>\n<p>Alla riga 7 abbiamo aggiunto una variabile che ci servir\u00e0 per controllare se il nostro oggetto \u00e8 gi\u00e0 stato eliminato (quindi, al valore YES corrisponder\u00e0 il logo eliminato, con NO il nostro logo sar\u00e0 ancora visibile); lo stesso vale per il metodo &#8220;cancella&#8221;, che si occuper\u00e0 invece dell&#8217;animazione legata all&#8217;eliminazione del logo.<\/p>\n<p>Implementiamo ora i metodi necessari. Apriamo il file &#8220;TrashAppViewController.m&#8221; e inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {\r\n\tUITouch *touch = [[event allTouches] anyObject];\r\n\tif ([touch view] == imageLogo) {\r\n\t\timageLogo.center = [touch locationInView:self.view];\r\n\t}\r\n}\r\n \r\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\r\n\tif (CGRectContainsRect([imageCestino frame], [imageLogo frame])){\r\n\t\timageCestino.image = [UIImage imageNamed:@\"TrashIconFull.png\"];\r\n\t\t[self cancella];\r\n\t}\r\n}\r\n \r\n- (void)cancella{\r\n\tcancellato = YES;\r\n\t[UIView beginAnimations:nil context:NULL];\r\n\t[UIView setAnimationDuration:0.5];\r\n\timageLogo.transform = CGAffineTransformMakeScale(.001, .001);\r\n\t[UIView commitAnimations];\r\n}\r\n<\/pre>\n<p>Abbiamo definito tre metodi, che si occuperanno del movimento del logo di Windows e della sua cancellazione. vediamoli nel dettaglio:<\/p>\n<ul>\n<li><strong>touchesMoved<\/strong>, (dalla riga 1 alla 6) In questo metodo, salviamo nella variabile &#8220;touch&#8221; l&#8217;evento che l&#8217;utente compie toccando un qualsiasi oggetto della nostra applicazione (riga 2). Controlliamo, poi, che l\u2019oggetto toccato corrisponda a &#8220;imageLogo&#8221; (riga 3), cio\u00e8 al logo di Windows: se l&#8217;oggetto \u00e8 proprio quello, teniamo traccia del centro dell\u2019oggetto (che nel frattempo viene mosso dall&#8217;utente) con la posizione del dito sullo schermo (riga 4). Ovvero, \u00e8 come se spostassimo fisicamente l&#8217;oggetto con il nostro dito e lo muovessimo su un piano.<\/li>\n<li><strong>touchesEnded<\/strong>, (dalla riga 8 alla 18) In questo metodo diciamo semplicemente che se il frame di &#8220;imageLogo&#8221; (ovvero il logo di Windows) \u00e8 contenuto in quello del cestino (riga 9), deve essere chiamato il metodo &#8220;cancella&#8221;, che si occuper\u00e0 dell&#8217;animazione della cancellazione (riga 11). Prima di chiamare tale metodo, inoltre, cambiamo l&#8217;immagine del cestino vuoto con quella del cestino pieno (riga 10). Se il logo, invece, non \u00e8 stato spostato sopra il cestino, eseguiamo una semplice animazione, che riporta l&#8217;immagine al centro della vista (dalla riga 13 alla 16).<\/li>\n<li><strong>cancella<\/strong>, (dalla riga 20 alla 26) In questo metodo definiamo l&#8217;animazione che avr\u00e0 il logo di Windows quando verr\u00e0 sposato sopra il cestino. Alla riga 16 cambiamo il valore della variabile &#8220;cancella&#8221;, in modo da sapere che il logo \u00e8 stato eliminato. Alla riga 17 definiamo il punto di partenza della nostra animazione, mentre con l&#8217;istruzione successiva ne definiamo la durata. La riga 19 \u00e8 l\u2019animazione vera e propria, che far\u00e0 scomparire il logo. Con l&#8217;ultima istruzione, infine, definiamo la fine dell&#8217;animazione.<\/li>\n<\/ul>\n<h4>4. Il ripristino del logo<\/h4>\n<p>Abbiamo quasi terminato la nostra applicazione, manca solo la definizione dell&#8217;azione &#8220;ripristina:&#8221;. Tale metodo \u00e8 gi\u00e0 stato definito da <em>Interface Builder<\/em>, quindi noi dobbiamo solo scrivere il codice al suo interno. Ecco le istruzioni da inserire:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (IBAction)ripristina {\r\n\tif (cancellato) {\r\n\t\t[UIView beginAnimations:nil context:NULL];\r\n\t\t[UIView setAnimationDuration:0.5];\r\n\t\timageLogo.transform = CGAffineTransformIdentity;\r\n\t\timageCestino.image = [UIImage imageNamed:@\"TrashIconEmpty.png\"];\r\n\t\timageLogo.center = CGPointMake(155.0, 100.0);\r\n\t\t[UIView commitAnimations];\r\n\t}\r\n}\r\n<\/pre>\n<p>Questo metodo \u00e8 speculare a &#8220;cancella&#8221;, in quanto dobbiamo eseguire l&#8217;animazione inversa! Andremo, quindi, ad eseguire un&#8217;animazione, che porter\u00e0 il logo dal cestino (in cui si trova) alla posizione originale (o quasi, in quanto \u00e8 definita in modo arbitrario da noi, alla riga 7).<\/p>\n<p>Clicchiamo ora su &#8220;Build and Go!&#8221;, e testiamo la nostra applicazione funzionante!<\/p>\n<p><strong>Nota:<\/strong> <em>se non avete l&#8217;animazione, controllate due cose. La prima \u00e8 che il logo di Windows non si nasconda dietro il cestino. Se cos\u00ec fosse, non avete seguito quello che vi ho detto nella costruzione dell&#8217;Interfaccia!! Ma non disperate, vi baster\u00e0 entrare in Interface Builder e scambiare l&#8217;ordine dei due componenti (ovviamente invertendo anche le immagini e le propriet\u00e0 associate). La seconda, invece, che la dimensione del logo (sempre in Interface Builder) e del componente UIImageView non sia maggiore di quella del cestino, altrimenti il controllo che abbiamo scritto nel metodo &#8220;touchesEnded&#8221; fallisce e non viene lanciata l&#8217;animazione. Anche in questo caso ci basta entrare in Interface Builder e ridimensionare il componente UIImageView.<\/em><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-13.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 13\" title=\"tutorial-053-iphone-trash-app-immagini-touch-13\" width=\"161\" height=\"300\" class=\"alignnone size-full wp-image-3694\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-13.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-13-80x150.png 80w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-14.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-14.png\" alt=\"Tutorial 053 iphone SDK Trash App Immagini Touch 14\" title=\"tutorial-053-iphone-trash-app-immagini-touch-14\" width=\"161\" height=\"300\" class=\"alignnone size-full wp-image-3695\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-14.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/tutorial-053-iphone-trash-app-immagini-touch-14-80x150.png 80w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><br \/>\n<\/center><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/TrashApp1.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\/06\/TrashApp1.zip\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo nuovo tutorial dedicato alla programmazione per iPhone SDK realizzeremo un&#8217;applicazione che ci dar\u00e0 un&#8217;infarinatura sulla&#8230;<\/p>\n","protected":false},"author":254,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[216,263,262,261,242],"class_list":["post-3680","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-busi","tag-gestione-immagini-iphone","tag-touchesended","tag-touchesmoved","tag-tutorial-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3680","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\/254"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3680"}],"version-history":[{"count":7,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3680\/revisions"}],"predecessor-version":[{"id":3757,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3680\/revisions\/3757"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}