T#035 – Creare uno screenshot a runtime
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’istantanea (screenshot) della vostra App durante l’esecuzione del programma. Verrà quindi mostrata nell’app un’anteprima di quanto catturato e salvato lo screenshot direttamente nel “Rullino fotografico” del vostro iPhone. Partiamo subito con il nostro tutorial.
Apriamo Xcode, creiamo un nuovo progetto, dall’elenco dei template disponibili selezioniamo “View-based Application” e proseguiamo. Diamo un nome, ad esempio myScreenshot, decidiamo la posizione dove salvare e clicchiamo su “Save”.
Per prima cosa aggiungiamo il Framework “Quartz.Core”. Per farlo, clicchiamo col pulsante destro del mouse su “Frameworks” in “Groups & Files”, quindi su “Add” e infine su “Existing Frameworks…”. Nella finestra che si apre cercate e selezionate “Quartz.Core.framework” quindi cliccate su “Add”.
Apriamo quindi il file di intestazione “myScreenshotViewController.h” e modifichiamo il codice come segue:
#import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> @interface myScreenshotViewController : UIViewController { IBOutlet UIImageView *anteprimaScreenshot; } @property (nonatomic, retain) IBOutlet UIImageView *anteprimaScreenshot; -(IBAction)scattaIstantanea; @end
Come vedete abbiamo semplicemente importato il framework, dichiarato un oggetto “IBOutlet” di tipo “UIImageView” e di nome “anteprimaScreenshot” che useremo appunto come anteprima e infine abbiamo dichiarato un metodo (IBAction) di nome “scattaIstantanea” che collegheremo successivamente ad un UIButton creato tramite Interface Builder.
Salviamo e passiamo alla creazione della semplice interfaccia grafica. Apriamo Interface Builder facendo doppio click sul file “myScreenshotViewController.xib” e trasciniamo nella vista i seguenti oggetti:
- N. 1 UIImageView
- N. 1 UIButton
Se volete potete “abbellire” 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 è qualcosa di simile a quanto mostrato in figura qui in basso:

Cliccate ora su “File’s Owner” e collegate gli oggetti appena creati, ai rispettivi oggetti e metodi creati precedentemente in Xcode. Collegate quindi “Image View” ad “anteprimaScreenshot” e il metodo “scattaIstantanea” al pulsante, facendo attenzione a selezionare “Touch Up Inside” al rilascio del mouse. Salviamo e chiudiamo Interface Builder.
Apriamo ora il file di implementazione “myScreenshotViewController.m” e andiamo a scrivere il codice vero r proprio che si occuperà di scattare lo screenshot, di mostrarlo in anteprima nell’UIImageView e di salvarlo nel “Rullino fotocamera” del nostro iPhone:
@synthesize anteprimaScreenshot; -(void)alertDone { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OK" message:@"Screenshot salvato nel Rullino fotografico" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } -(IBAction)scattaIstantanea { UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil); [anteprimaScreenshot setImage:viewImage]; [self alertDone]; }
Come vedete il codice è molto semplice. Abbiamo inoltre aggiunto un UIAlert che viene mostrato dopo la pressione del tasto e ci informa che lo screenshot è stato correttamente salvato.
Potete salvare e provare il programma sull’iPhone Simulatore o direttamente sul vostro dispositivo, il risultato è mostrato in figura, ovviamente potrete verificare la presenza dell’immagine catturata sul vostro “Rullino fotografico”:


















Ganzo davvero