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:

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController : UIViewController{

AVCaptureSession *torchSession;

    IBOutlet UISwitch *switcher;
}

@property (nonatomic, retain) AVCaptureSession * torchSession;

- (IBAction) toggleTorch;

@end

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.

@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];
    }

}

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.

Related Posts

iOS Continuos Integration con Xcode 9

Come creare un framework in swift

Perchè usare JSON: 3 motivi sul perchè ha rivoluzionato API e Applicazioni

iOS 9: UIStackView

  • Marco Lecce

    Ciao Ragazzi Sbaglio o questa riga di codice presenta un errore ?gentilmente potete correggere . grazie ciao

    • sarebbe d’aiuto che quando trovi un errore segnali anche a quale riga. Comunque ho riveduto e corretto gli errori dovuti dal plugin che enfatizza di codice. Grazie della segnalazione.

      • Ciao senti ma per implementare la funzione per far lampeggiare il flash e regolarne la velocità dove posso vedere ? grazie saluti marco

        • beh la funzione è sempre la stessa…devi solo implementare un NSTimer, di cui puoi trovare un tutorial sul blog, che svolga l’azione di spegnere e accedere il flash

          • Marco Lecce

             grazie mille sei sempre disponibile nel fornirmi informazioni grazie

  • Pasquale Aita

    Ciao, da il seguente errore nel ViewController.m

    • i puntini vanno rimossi… significano che la riga prima va in alto al documento .m ed il resto in messo alle altre implementazioni. formattazione tipica di quando si spiega un codice 😉

      • Pasquale Aita

        In tal caso da questo:

        • solo perche synthesize va sempre dopo implementation…. come suggerito dal warning di xcode. 🙂

          • Giuseppe ©

            a me da errore quando chiamo la funzione “release”, in entrambe le parti [output release] e [session release] … come devo fare?

Si prega di attivare i Javascript! / Please turn on Javascript!

Javaskripta ko calu karem! / Bitte schalten Sie Javascript!

S'il vous plaît activer Javascript! / Por favor, active Javascript!

Qing dakai JavaScript! / Qing dakai JavaScript!

Пожалуйста включите JavaScript! / Silakan aktifkan Javascript!