Applicazione Torcia – Accendiamo il Flash LED dell’iPhone

È 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.