9 Stimmen

Wie kann ich erreichen, dass die LED-Leuchte des iPhone 4 sofort aufleuchtet?

Ich bin derzeit mit dem unten stehenden Code zum Ein- und Ausschalten meines iPhone 4 LED-Licht und es funktioniert gut, aber das einzige Problem ist, dass jedes Mal, wenn ich die LED einschalten gibt es eine leichte Verzögerung. Allerdings schaltet es sofort aus. Ich brauche es sofort zu feuern, um eine Strobe wie Funktion zu implementieren, und weil es einfach bequemer ist.

Mir ist aufgefallen, dass sich die LED in der Kamera-App von Apple und in vielen anderen Apps sofort ein- und ausschaltet, wenn Sie die Einschalttaste drücken.

Ich habe versucht, einige der Objekte wie "Sitzung" und "Gerät" als Instanzvariablen zu meinem View-Controller hinzuzufügen, um das iPhone diese Objekte zur Ladezeit erstellen zu lassen, aber ich habe kein Glück gehabt, um es zum Laufen zu bringen.

Ich habe auch versucht, mir Apples WWDC-Beispielcode anzusehen, aber ich kann den komplexen Code einfach nicht entschlüsseln. Kann mir jemand bitte helfen, dies herauszufinden, ich habe versucht, für etwa 4 Tage, um dies zu bekommen, zu arbeiten.

.h

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

@interface FlashlightViewController : UIViewController {

    AVCaptureSession *torchSession;
}

@property (nonatomic, retain) AVCaptureSession * torchSession;

- (void) toggleTorch;

@end

.m

#import "FlashlightViewController.h"

@implementation FlashlightViewController

@synthesize torchSession;

- (void)dealloc 
{
    [torchSession release];
    [super dealloc];
}

- (void)viewDidLoad 
{
    [self toggleTorch];
    [super viewDidLoad];
}

- (void) toggleTorch 
{
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    if ([device hasTorch] && [device hasFlash])
    {
        if (device.torchMode == AVCaptureTorchModeOff) 
        {
            NSLog(@"It's currently off.. turning on now.");

            AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
            AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];

            AVCaptureSession *session = [[AVCaptureSession alloc] init];

            [session beginConfiguration];
            [device lockForConfiguration:nil];

            [device setTorchMode:AVCaptureTorchModeOn];
            [device setFlashMode:AVCaptureFlashModeOn];

            [session addInput:flashInput];
            [session addOutput:output];

            [device unlockForConfiguration];

            [output release];

            [session commitConfiguration];
            [session startRunning];

            [self setTorchSession:session];
            [session release];
        }
        else {

            NSLog(@"It's currently on.. turning off now.");
            [torchSession stopRunning];
        }
    }
}

30voto

hotpaw2 Punkte 69093

Erledigen Sie alles (die gesamte Sitzungs- und Gerätekonfiguration) mit Ausnahme des Flash-Konfigurationsblocks, bevor Sie die Flash-LED einschalten wollen, während des App-Init oder View-Load.

Stellen Sie dann einfach den Taschenlampenmodus ein, wenn Sie die LED einschalten möchten. Etwas wie:

[self.myDevice lockForConfiguration:nil];
[self.myDevice setTorchMode:AVCaptureTorchModeOn];
[self.myDevice setFlashMode:AVCaptureFlashModeOn];
[self.myDevice unlockForConfiguration];

Vergewissern Sie sich, dass myDevice eine richtig konfigurierte Eigenschaft während der Initialisierung ist.

1voto

Thomas Besnehard Punkte 2016

Ein bisschen nekromantisch, aber hier ist eine tolle Bibliothek dazu:

LARSTTorch

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X