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