È oramai prassi trovare su AppStore applicazioni che sfruttano il flash LED dell’iPhone 4 in poi per poter creare delle torce. Vediamo cosa c’è dietro a queste applicazioni andando ad analizzare un po’ com’è fatto il codice.
Andremo a creare un’applicazione che tramite uno switch (UISwitch) permette di accendere e spegnere il flash.
Apriamo Xcode, e creiamo un nuovo progetto del tipo Single-view application ed inseriamo il framework AVFoundation. (Ecco la guida per inserire i framework) ed iniziamo ad aggiungere nel file ViewController.xib un oggetto di tipo UISwitch.
Passiamo al file ViewController.h e digitiamo il seguente codice:
[code lang=”obj-c”]#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController : UIViewController{
AVCaptureSession *torchSession;
IBOutlet UISwitch *switcher;
}
@property (nonatomic, retain) AVCaptureSession * torchSession;
– (IBAction) toggleTorch;
@end[/code]
Adesso dobbiamo passare ad implementare i metodi, quindi spostiamoci nel file ViewController.m e scriviamo il metodo, senza dimenticarci ti fare il syntetize dello switcher.
[code lang=”obj-c”]@synthesize torchSession;
.
.
.
– (IBAction) toggleTorch {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
AVCaptureSession *session = [[AVCaptureSession alloc] init];
if ([device hasTorch] && [device hasFlash]){
if (device.torchMode == AVCaptureTorchModeOff) {
[session beginConfiguration];
[device lockForConfiguration:nil];
[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];
[device unlockForConfiguration];
[session addInput:flashInput];
[session addOutput:output];
[device unlockForConfiguration];
[output release];
[session commitConfiguration];
}
}
if ([switcher isOn]==YES) {
[session startRunning];
[self setTorchSession:session];
[session release];
}
else {
[torchSession stopRunning];
}
}[/code]
Colleghiamo metodi e oggetti (per lo switch usiamo ValueChanged) con l’interfaccia ed avviamo l’applicazione.
Abbiamo concluso. Ricordiamoci che, ovviamente, dobbiamo provare l’applicazione sel dispositivo reale poiché il simulatore non supporta il Flash.