{"id":3022,"date":"2010-04-19T13:52:49","date_gmt":"2010-04-19T11:52:49","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3022"},"modified":"2010-04-19T13:54:52","modified_gmt":"2010-04-19T11:54:52","slug":"t035-creare-uno-screenshot-a-runtime","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t035-creare-uno-screenshot-a-runtime\/","title":{"rendered":"T#035 &#8211; Creare uno screenshot a runtime"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS.jpg\" alt=\"T035 - Screenshot esecuzione tutorial 035 - Screenshot a runtime\" title=\"T035-IS\" width=\"48\" height=\"91\" class=\"alignleft size-full wp-image-3096\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS-156x300.jpg 156w\" sizes=\"auto, (max-width: 48px) 100vw, 48px\" \/><\/a> Rispondiamo ad una richiesta di un nostro utente pubblicando questo interessante Tutorial di programmazione iPhone. Vi mostreremo come catturare con poche righe di codice un&#8217;istantanea (screenshot) della vostra App durante l&#8217;esecuzione del programma.  Verr\u00e0 quindi mostrata nell&#8217;app un&#8217;anteprima di quanto catturato e salvato lo screenshot direttamente nel &#8220;Rullino fotografico&#8221; del vostro iPhone. Partiamo subito con il nostro tutorial.<\/p>\n<p>Apriamo Xcode, creiamo un nuovo progetto, dall&#8217;elenco dei template disponibili selezioniamo &#8220;View-based Application&#8221; e proseguiamo. Diamo un nome, ad esempio <em>myScreenshot<\/em>, decidiamo la posizione dove salvare e clicchiamo su &#8220;Save&#8221;.<!--more--><\/p>\n<p>Per prima cosa aggiungiamo il Framework &#8220;Quartz.Core&#8221;. Per farlo, clicchiamo col pulsante destro del mouse su &#8220;Frameworks&#8221; in &#8220;Groups &#038; Files&#8221;, quindi su &#8220;Add&#8221; e infine su &#8220;Existing Frameworks&#8230;&#8221;. Nella finestra che si apre cercate e selezionate &#8220;Quartz.Core.framework&#8221; quindi cliccate su &#8220;Add&#8221;.<\/p>\n<p>Apriamo quindi il file di intestazione &#8220;myScreenshotViewController.h&#8221; e modifichiamo il codice come segue:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n#import <QuartzCore\/QuartzCore.h>\r\n\r\n@interface myScreenshotViewController : UIViewController {\r\n\tIBOutlet UIImageView *anteprimaScreenshot;\r\n}\r\n\r\n@property (nonatomic, retain) IBOutlet UIImageView *anteprimaScreenshot;\r\n\r\n-(IBAction)scattaIstantanea;\r\n\r\n@end\r\n<\/pre>\n<p>Come vedete abbiamo semplicemente importato il framework, dichiarato un oggetto &#8220;IBOutlet&#8221; di tipo &#8220;UIImageView&#8221; e di nome &#8220;anteprimaScreenshot&#8221; che useremo appunto come anteprima e infine abbiamo dichiarato un metodo (IBAction) di nome &#8220;scattaIstantanea&#8221; che collegheremo successivamente ad un UIButton creato tramite Interface Builder.<\/p>\n<p>Salviamo e passiamo alla creazione della semplice interfaccia grafica. Apriamo Interface Builder facendo doppio click sul file &#8220;myScreenshotViewController.xib&#8221; e trasciniamo nella vista i seguenti oggetti:<\/p>\n<ul>\n<li>N. 1 UIImageView<\/li>\n<li>N. 1 UIButton<\/li>\n<\/ul>\n<p>Se volete potete &#8220;abbellire&#8221; la vostra vista inserendo altri elementi a piacere, come abbiamo fatto noi, anche se superflui per il funzionamento di questo progetto. Quello che dovete ottenere \u00e8 qualcosa di simile a quanto mostrato in figura qui in basso:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IB.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IB.jpg\" alt=\"T035 - Interfaccia grafica tutorial 35 - Screenshot a runtime\" title=\"T035-IB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-3095\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IB.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IB-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Cliccate ora su &#8220;File&#8217;s Owner&#8221; e collegate gli oggetti appena creati, ai rispettivi oggetti e metodi creati precedentemente in Xcode. Collegate quindi &#8220;Image View&#8221; ad &#8220;anteprimaScreenshot&#8221; e il metodo &#8220;scattaIstantanea&#8221; al pulsante, facendo attenzione a selezionare &#8220;Touch Up Inside&#8221; al rilascio del mouse. Salviamo e chiudiamo Interface Builder.<\/p>\n<p>Apriamo ora il file di implementazione &#8220;myScreenshotViewController.m&#8221; e andiamo a scrivere il codice vero r proprio che si occuper\u00e0 di scattare lo screenshot, di mostrarlo in anteprima nell&#8217;UIImageView e di salvarlo nel &#8220;Rullino fotocamera&#8221; del nostro iPhone:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n@synthesize anteprimaScreenshot;\r\n\r\n-(void)alertDone {\r\n\tUIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"OK\" message:@\"Screenshot salvato nel Rullino fotografico\" delegate:self cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\r\n\t<div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n\t<div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n}\r\n\r\n-(IBAction)scattaIstantanea {\r\n\tUIGraphicsBeginImageContext(self.view.bounds.size);\r\n\t[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];\r\n\tUIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();\r\n\tUIGraphicsEndImageContext();\r\n\tUIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil);\r\n\r\n\t[anteprimaScreenshot setImage:viewImage];\r\n\t\r\n\t[self alertDone];\r\n}\r\n<\/pre>\n<p>Come vedete il codice \u00e8 molto semplice. Abbiamo inoltre aggiunto un UIAlert che viene mostrato dopo la pressione del tasto e ci informa che lo screenshot \u00e8 stato correttamente salvato.<\/p>\n<p>Potete salvare e provare il programma sull&#8217;iPhone Simulatore o direttamente sul vostro dispositivo, il risultato \u00e8 mostrato in figura, ovviamente potrete verificare la presenza dell&#8217;immagine catturata sul vostro &#8220;Rullino fotografico&#8221;:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS.jpg\" alt=\"T035 - Screenshot esecuzione tutorial 035 - Screenshot a runtime\" title=\"T035-IS\" width=\"386\" height=\"742\" class=\"aligncenter size-full wp-image-3096\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/T035-IS-156x300.jpg 156w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rispondiamo ad una richiesta di un nostro utente pubblicando questo interessante Tutorial di programmazione iPhone. Vi mostreremo&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[188,187,1,23],"class_list":["post-3022","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-quartz-core","tag-screenshot","tag-tutorial-pratici","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3022","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3022"}],"version-history":[{"count":5,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3022\/revisions"}],"predecessor-version":[{"id":3100,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3022\/revisions\/3100"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}