如何让iPhone4的LED灯立即亮起?

如何让iPhone4的LED灯立即亮起?,iphone,ios4,flashlite,Iphone,Ios4,Flashlite,我目前正在使用下面的代码来打开和关闭我的iPhone4 LED灯,它工作得很好,但唯一的问题是每次我打开LED灯都会有轻微的延迟。但是,它会立即关闭。我需要它立即启动,以实现一个类似频闪的功能,因为它更方便 我注意到,在苹果的摄像头应用程序和许多其他应用程序中,当你按下电源按钮时,LED会立即打开和关闭 为了让iPhone在加载时创建这些对象,我尝试将一些对象(如“会话”和“设备”)作为实例变量添加到我的视图控制器中,但是我没有成功地让它工作 我也试过看苹果的WWDC示例代码,但我似乎无法破译他

我目前正在使用下面的代码来打开和关闭我的iPhone4 LED灯,它工作得很好,但唯一的问题是每次我打开LED灯都会有轻微的延迟。但是,它会立即关闭。我需要它立即启动,以实现一个类似频闪的功能,因为它更方便

我注意到,在苹果的摄像头应用程序和许多其他应用程序中,当你按下电源按钮时,LED会立即打开和关闭

为了让iPhone在加载时创建这些对象,我尝试将一些对象(如“会话”和“设备”)作为实例变量添加到我的视图控制器中,但是我没有成功地让它工作

我也试过看苹果的WWDC示例代码,但我似乎无法破译他们复杂的代码。有人能帮我弄明白吗?我已经试了4天了,想让它工作起来

H 在app init或view load期间,在您想要打开闪存LED之前,请执行除闪存配置块之外的所有操作(所有会话和设备配置内容)

然后,当您想打开LED时,只需打开手电筒模式。比如:

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

确保在初始化期间myDevice是一个正确配置的属性。

有点necromantic,但这里有一个很好的库来实现这一点:


这是一个很好的答案。太糟糕了,@hotpaw2从来没有得到它应得的检查。我的理解是“闪光”类似于氙气闪光,不能持续打开,因为它需要一个电容器充电一两秒钟,然后闪光才能瞬间运行。而“火炬”是一个可以持续点亮的LED。因此,我的实现只执行
setTorchMode
,而不执行
setFlashMode
。似乎工作正常。当我试着启动手电筒时,我的LED灯闪烁了一秒钟,然后又亮了,一直亮着……你知道这个问题吗?
#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];
        }
    }
}
[self.myDevice lockForConfiguration:nil];
[self.myDevice setTorchMode:AVCaptureTorchModeOn];
[self.myDevice setFlashMode:AVCaptureFlashModeOn];
[self.myDevice unlockForConfiguration];