{"id":3848,"date":"2010-07-01T10:44:31","date_gmt":"2010-07-01T08:44:31","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3848"},"modified":"2010-07-01T10:48:33","modified_gmt":"2010-07-01T08:48:33","slug":"t060-creiamo-unapplicazione-per-iphone-in-stile-brushes-parte-2","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t060-creiamo-unapplicazione-per-iphone-in-stile-brushes-parte-2\/","title":{"rendered":"T#060 &#8211; Creiamo un&#8217;applicazione per iPhone in stile &#8220;Brushes&#8221; [Parte 2]"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/pennelli-brushes-iphone.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/pennelli-brushes-iphone.jpg\" alt=\"pennelli-brushes-iphone\" title=\"pennelli-brushes-iphone\" width=\"137\" height=\"113\" class=\"alignleft size-full wp-image-3867\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/pennelli-brushes-iphone.jpg 546w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/pennelli-brushes-iphone-300x247.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/pennelli-brushes-iphone-150x123.jpg 150w\" sizes=\"auto, (max-width: 137px) 100vw, 137px\" \/><\/a> Nella prima parte del tutorial abbiamo visto come creare la struttura di base del nostro \u201cBrushes\u201d, inoltre abbiamo fatto in modo che l\u2019utente possa disegnare all\u2019interno dell\u2019applicazione.<\/p>\n<p>In questa seconda parte aggiungeremo alcuni aspetti fondamentali per migliorare l\u2019applicazione: la possibilit\u00e0 di cambiare la dimensione e il colore del pennello, e la possibilit\u00e0 di salvare i disegni.<\/p>\n<p>Vedremo, quindi, come due classi diverse possano comunicare tra loro, e come utilizzare il metodo \u201cimageSavedToPhotosAlbum\u201d che permette di salvare delle immagini nella galleria dell\u2019utente.<!--more--><\/p>\n<h4>1. Aggiungiamo le impostazioni<\/h4>\n<p>Iniziamo dichiarando nella classe &#8220;FlipsideViewController.h&#8221; gli elementi che poi andremo a definire in Interface Builder. Ecco il codice da inserire:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n@protocol FlipsideViewControllerDelegate;\r\n\r\n@interface FlipsideViewController : UIViewController {\r\n id &lt;FlipsideViewControllerDelegate&gt; delegate;\r\n\r\n IBOutlet UISlider *sliderRosso, *sliderBlu, *sliderVerde, *sliderAlpha, *sliderDimensione;\r\n IBOutlet UIImageView *viewColore;\r\n IBOutlet UILabel *labelDimensione;\r\n\r\n UIColor *colorePennello;\r\n float dimensionePennello;\r\n}\r\n\r\n@property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate;\r\n@property (nonatomic, assign) UIColor *colorePennello;\r\n@property (nonatomic, assign) float dimensionePennello;\r\n\r\n- (IBAction)done;\r\n- (IBAction)cambiaColore;\r\n- (IBAction)cambiaDimensione;\r\n\r\n@end\r\n\r\n@protocol FlipsideViewControllerDelegate\r\n- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;\r\n@end\r\n<\/pre>\n<p>Parte di questo codice \u00e8 gi\u00e0 presente nella classe. Alle righe 6, 7, 8 abbiamo definito gli elementi grafici che ci serviranno. Come potete vedere, ci serviranno tre slider per cambiare il colore del pennello (pi\u00f9 uno per la trasparenza alpha), una UIImageView in cui mostreremo il colore corrente, in modo che l&#8217;utente possa vedere subito quale colore sta selezionando, uno slider e una label per la dimensione del pennello. Abbiamo, inoltre, definito due nuove azioni (righe 15 e 16): essese verranno richiamate quando si muovono gli slider.<\/p>\n<p>Salviamo il file e apriamo &#8220;FlipsideView.xib&#8221;. Inserite i componenti necessari in modo da avere una struttura come la seguente:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3849\" title=\"Immagine 1\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-1-206x299.png\" alt=\"\" width=\"206\" height=\"299\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-1-206x299.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-1-103x149.png 103w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-1.png 400w\" sizes=\"auto, (max-width: 206px) 100vw, 206px\" \/><\/a><\/p>\n<p>Dobbiamo eseguire i collegamenti con gli elementi che abbiamo definito in precedenza. Selezionate &#8220;File&#8217;s Owner&#8221; e nel pannello &#8220;Connection Inspector&#8221; collegate i vari slider e la UIImageView (niente di difficile). Se avete eseguito questi collegamenti correttamente avrete un pannello come questo:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-22.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3850\" title=\"Immagine 2\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-22.png\" alt=\"\" width=\"301\" height=\"369\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-22.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-22-244x300.png 244w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-22-122x150.png 122w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Dobbiamo collegare anche le due azioni adesso. Collegate &#8220;cambiaColore&#8221; con tutti e quattro gli slider del colore, selezionando ogni volta &#8220;Value Changed&#8221; nel men\u00f9 che vi appare. Collegate, infine, &#8220;cambiaDimensione&#8221; con lo slider della dimensione del pennello. Ecco come appare il vostro pannello con tutti i collegamenti effettuati:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-42.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3851\" title=\"Immagine 4\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-42.png\" alt=\"\" width=\"301\" height=\"476\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-42.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-42-189x300.png 189w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-42-94x150.png 94w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Abbiamo quasi concluso questa parte. Ci manca solo la definizione dei valori massimi e minimi dei vari slider. Selezioniamo il primo slider (quello per il rosso), spostiamoci nell&#8217;Attributes Inspector e controlliamo che come &#8220;Minumum Value&#8221; sia impostato 0.0, mentre come &#8220;Maximum Value&#8221; ci sia 1.0:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-52.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3852\" title=\"Immagine 5\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-52.png\" alt=\"\" width=\"301\" height=\"243\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-52.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-52-300x242.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-52-150x121.png 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Controllate anche i restanti slider dedicati al colore.<\/p>\n<p>Per lo slider della dimensione, invece, dobbiamo impostare dei valori diversi. Io ho scelto 1.0 come minimo, e 25.0 come massimo. Ovviamente potete variare come volete questi valori, magari effettuando delle prove.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-62.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3853\" title=\"Immagine 6\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-62.png\" alt=\"\" width=\"301\" height=\"243\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-62.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-62-300x242.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-62-150x121.png 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Abbiamo concluso la definizione grafica del pannello delle impostazioni. Salviamo il file e chiudiamo Interface Builder.<\/p>\n<h4>2. Scriviamo il codice necessario<\/h4>\n<p>Dobbiamo ora impostare il codice necessario. Apriamo il file &#8220;FlipsideViewController.m&#8221; e iniziamo ad inserire questo codice:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"FlipsideViewController.h\"\r\n\r\n@implementation FlipsideViewController\r\n\r\n@synthesize delegate, colorePennello, dimensionePennello;\r\n\r\n- (void)viewDidLoad {\r\n [super viewDidLoad];\r\n self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];\r\n\r\n const CGFloat *components = CGColorGetComponents([colorePennello CGColor]);\r\n [sliderRosso setValue:components[0]];\r\n [sliderVerde setValue:components[1]];\r\n [sliderBlu setValue:components[2]];\r\n [sliderAlpha setValue:components[3]];\r\n [viewColore setBackgroundColor:colorePennello];\r\n labelDimensione.text = [NSString stringWithFormat:@\"%f\",dimensionePennello];\r\n [sliderDimensione setValue:dimensionePennello];\r\n}\r\n<\/pre>\n<p>Per prima cosa ricordatevi di inserire le @synthesize degli elementi &#8220;colorePennello&#8221; e &#8220;dimensionePennello&#8221;. Questi due valori li passeremo direttamente dalla &#8220;MainView&#8221;, quindi \u00e8 importante che ci siano le due propriet\u00e0 impostate correttamente. Passeremo i due valori in modo che all&#8217;apertura del pannello per modificare il pennello l&#8217;utente trovi i valori correnti che sta utilizzando (quindi colore e dimensione attuali).<\/p>\n<p>Nel metodo &#8220;viewDidLoad&#8221; facciamo proprio quello che vi ho appena detto, ovvero inizializziamo i componenti grafici ai valori del pennello. All&#8217;avvio dell&#8217;applicazione tali valori saranno rosso per il colore, e 5.0 per la dimensione. Questi valori, per\u00f2, potranno essere variati dall&#8217;utente, quindi \u00e8 necessario che ogni volta che viene aperta la vista delle impostazioni essi siano settati correttamente. In particolare, ricaviamo dal colore le varie componenti (come abbiamo gi\u00e0 visto nella prima parte del tutorial), e settiamo il valore degli slider (righe 11-15). Alla riga 16 impostiamo il colore della UIImageView, che ci mostrer\u00e0 cos\u00ec il colore del nostro pennello. Le ultime due righe, infine, servono per ricavare la dimensione del pennello e settare la label predisposta.<\/p>\n<p>Dobbiamo ora definire le due azioni collegate agli slider. Ecco i due metodi (davvero semplici) da implemetare:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (IBAction)cambiaColore{\r\n [viewColore setBackgroundColor:[UIColor colorWithRed:sliderRosso.value green:sliderVerde.value blue:sliderBlu.value alpha:sliderAlpha.value]];\r\n}\r\n\r\n- (IBAction)cambiaDimensione{\r\n labelDimensione.text = [NSString stringWithFormat:@\"%f\",sliderDimensione.value];\r\n}\r\n<\/pre>\n<p>Il primo metodo (&#8220;cambiaColore&#8221;) non fa altro che leggere i valori degli slider e settare lo sfondo dell&#8217;immagine con l&#8217;UIColor corrispondente. Il secondo metodo lavora nello stesso modo, solamente che visualizza il valore dello slider della dimensione del pennello. Semplici vero?<\/p>\n<p>Ci manca solo una modifica ad un metodo gi\u00e0 esistende. Dobbimo, infatti, passare alla classe &#8220;MainView&#8221; i nuovi valori della dimensione e del colore del pennello. Modifichiamo, quindi, il metodo &#8220;done&#8221; nel seguente modo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (IBAction)done {\r\n dimensionePennello = sliderDimensione.value;\r\n colorePennello = [UIColor colorWithRed:sliderRosso.value green:sliderVerde.value blue:sliderBlu.value alpha:sliderAlpha.value];\r\n [self.delegate flipsideViewControllerDidFinish:self nuovoColore:colorePennello nuovaDimensione:dimensionePennello];\r\n}\r\n<\/pre>\n<p>Abbiamo semplicemente letto il valore della dimensione e del colore del pennello, per poi passarlo al metodo &#8220;flipsideviewControllerDidFinish&#8221;, che abbiamo opportunamente modificato (infatti vedrete che ci sono dei nuovi parametri che gli vengono passati).<\/p>\n<p>Torniamo al file &#8220;FlipsideViewController.h&#8221; e modifichiamo anche l&#8217;intestazione del metodo che troviamo nel fondo della classe:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n@protocol FlipsideViewControllerDelegate\r\n- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller nuovoColore:(UIColor*)colore nuovaDimensione:(float)dimensione;\r\n@end\r\n<\/pre>\n<p>Abbiamo quasi terminato.<\/p>\n<p>Torniamo al file &#8220;MainViewController.m&#8221;, dobbiamo modificare due cose. Dobbiamo fare in modo che venga passato alla vista delle impostazioni i valori del pennello, e, viceversa, che vengano aggiornati dopo che l&#8217;utente li ha variati.<\/p>\n<p>Iniziate modificando il metodo &#8220;flipsideViewControllerDidFinish&#8221;, che trovate gi\u00e0 nella vostra classe:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller nuovoColore:(UIColor*)colore nuovaDimensione:(float)dimensione{\r\n\r\n const CGFloat *components = CGColorGetComponents([colore CGColor]);\r\n colorePennello = [[UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:components[3]] retain];\r\n dimensionePennello = dimensione;\r\n\r\n [self dismissModalViewControllerAnimated:YES];\r\n}\r\n<\/pre>\n<p>Come potete vedere, \u00e8 stata per prima cosa modificata l&#8217;intestazione del metodo (proprio quello che vi ho accennato poco fa). Vengono, poi, aggiornate le caratteristiche del pennello, inserendo il nuovo colore e la nuova dimensione.<\/p>\n<p>Il secondo metodo da modificare \u00e8 &#8220;showInfo&#8221;, anch&#8217;esso gi\u00e0 definito da XCode:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (IBAction)showInfo {\u00a0\u00a0 \u00a0\r\n\r\n FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@\"FlipsideView\" bundle:nil];\r\n controller.delegate = self;\r\n controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;\r\n\r\n controller.dimensionePennello = dimensionePennello;\r\n controller.colorePennello = colorePennello;\r\n\r\n [self presentModalViewController:controller animated:YES];\r\n\r\n [controller release];\r\n}\r\n<\/pre>\n<p>A questo metodo aggiungiamo solo le righe 7 e 8, in modo da passare alla vista delle impostazioni le propriet\u00e0 correnti del nostro pennello (quelle che vengono lette nel metodo &#8220;viewDidLoad&#8221; che abbiamo scritto prima).<\/p>\n<p>Abbiamo concluso anche questa parte.<\/p>\n<h4>3. Inseriamo il salvataggio delle nostre immagini<\/h4>\n<p>Voglia ora aggiungere una funzione molto importante: il salvataggio del disegno creato. Vogliamo permettere all&#8217;utente, quindi, di salvare il suo disegna, in modo che possa poi ritrovarlo nel Rullino Fotografico.<\/p>\n<p>Iniziamo definendo in &#8220;MainViewController&#8221; un metodo che assoceremo ad un pulsante nella nostra applicazione. Ecco cosa dovete aggiungere nel file &#8220;MainViewController.h&#8221;:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"FlipsideViewController.h\"\r\n\r\n@interface MainViewController : UIViewController &lt;FlipsideViewControllerDelegate&gt; {\r\n IBOutlet UIImageView *viewDisegno;\r\n\r\n CGPoint ultimoPunto;\r\n\r\n float dimensionePennello;\r\n UIColor *colorePennello;\r\n}\r\n\r\n- (IBAction)showInfo;\r\n- (IBAction)cancella;\r\n- (IBAction)salva;\r\n\r\n@end\r\n<\/pre>\n<p>Come vedete abbiamo aggiunto solo la definizione del metodo &#8220;salva&#8221; alla riga 14.<\/p>\n<p>Salviamo il file e apriamo la vista &#8220;MainView.xib&#8221;. Nella toolbar inseriamo un bottone, dal &#8220;File&#8217;s Owner&#8221; colleghiamo l&#8217;azione salva a tale bottone. Se avrete eseguito tutto correttamente avrete i seguenti risultati:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-81.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3854\" title=\"Immagine 8\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-81-206x299.png\" alt=\"\" width=\"206\" height=\"299\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-81-206x299.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-81-103x149.png 103w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-81.png 400w\" sizes=\"auto, (max-width: 206px) 100vw, 206px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-91.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3855\" title=\"Immagine 9\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-91.png\" alt=\"\" width=\"301\" height=\"263\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-91.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-91-300x262.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-91-150x131.png 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Salvate tutto e spostatevi nel file &#8220;MainViewController.m&#8221;.<\/p>\n<p>Dobbiamo ora definire il metodo salva, scrivendo il codice necessario per salvare l&#8217;immagine nella galleria dell&#8217;utente. Ecco il codice da inserire:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (IBAction) salva{\r\n UIImageWriteToSavedPhotosAlbum(viewDisegno.image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);\r\n}\r\n\r\n- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {\r\n NSString *messaggio;\r\n NSString *titolo;\r\n if (!error) {\r\n titolo = @\"Salvataggio\";\r\n messaggio = @\"Immagine salvata con successo\";\r\n } else {\r\n titolo = @\"Errore\";\r\n messaggio = [error description];\r\n }\r\n UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titolo message:messaggio delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\r\n <div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n <div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n}\r\n<\/pre>\n<p>Come potete vedere il codice \u00e8 molto semplice. Il metodo salva non fa altro che richiamare un metodo &#8220;imageSavedToPhotosAlbum&#8221;, che si occupa di salvare l&#8217;immagine nella galleria. In tale metodo, infatti, non vedrete istruzioni che si occupano del salvataggio, ma solo un controllo se l&#8217;operazione \u00e8 andata a buon fine. Viene infatti controllata la variabile &#8220;error&#8221; (riga 8), e viene impostato un messaggio da visualizzare poi all&#8217;utente, che dovr\u00e0 essere avvisato se il salvataggio si \u00e8 concluso correttamente oppure se ci sono stati degli errori.<\/p>\n<p>Tutto molto semplice come sempre!<\/p>\n<p>Abbiamo concluso! Cliccate su &#8220;Build and Go!&#8221; e testate il vostro programma funzionante!<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-101.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3856\" title=\"Immagine 10\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-101-161x300.png\" alt=\"\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-101-161x300.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-101-80x150.png 80w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-101.png 414w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-111.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3857\" title=\"Immagine 11\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-111-161x300.png\" alt=\"\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-111-161x300.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-111-80x150.png 80w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/Immagine-111.png 414w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/SampleBrushes_parte2.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,\u00a0<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/SampleBrushes_parte2.zip\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nella prima parte del tutorial abbiamo visto come creare la struttura di base del nostro \u201cBrushes\u201d, inoltre&#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,294,242,204,295,279],"class_list":["post-3848","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-busi","tag-imagesavedtophotosalbum","tag-tutorial-xcode","tag-uicolor","tag-uiimageview","tag-uislider"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3848","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=3848"}],"version-history":[{"count":11,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3848\/revisions"}],"predecessor-version":[{"id":3877,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3848\/revisions\/3877"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}