问题描述
我目前正在使用下面的代码来打开和关闭我的 iPhone 4 LED 灯,效果很好,但唯一的问题是每次打开 LED 时都会有轻微的延迟.但是它会立即关闭.我需要它立即触发以实现类似频闪的功能,因为它更方便.
I'm currently using the below code to turn on and off my iPhone 4 LED light and it's working great, but the only problem is that every time I turn the LED on there is a slight delay. However it turns off instantly. I need it to fire instantly to implement a strobe like feature, and because it's just more convenient.
我注意到,在 Apple 的相机应用程序和许多其他应用程序中,当您按下电源按钮时,LED 会立即打开和关闭.
I've noticed that in Apple's camera app and many other apps that the LED turns on and off instantaneously when you hit the power button.
我尝试将会话"和设备"之类的一些对象作为实例变量添加到我的视图控制器中,以便让 iPhone 在加载时创建这些对象,但是我没有获得任何运气它工作.
I've tried adding some of the objects like "session" and "device" as instance variables to my view controller in order to have the iPhone create those objects at load time, however I haven't had any luck in getting it to work.
我也尝试查看苹果的 WWDC 示例代码,但我似乎无法破译他们的复杂代码.有人可以帮我弄清楚我已经尝试了大约 4 天来让它工作.
I've also tried looking at apples WWDC sample code but I just can't seem to decipher their complex code. Can someone please help me figure this out i've been trying for about 4 days to get this to work.
#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];
}
}
}
推荐答案
在你想要打开闪光灯 LED 之前,在应用程序初始化或查看加载期间,做所有的事情(所有会话和设备配置的东西).
Do everything (all the session and device configuration stuff) except the flash configuration block before you want to turn the flash LED on, during app init or view load.
然后,当您想打开 LED 时,只需打开手电筒模式即可.比如:
Then just set torch mode on when you want to turn the LED on. Something like:
[self.myDevice lockForConfiguration:nil];
[self.myDevice setTorchMode:AVCaptureTorchModeOn];
[self.myDevice setFlashMode:AVCaptureFlashModeOn];
[self.myDevice unlockForConfiguration];
确保 myDevice 在您的初始化过程中是正确配置的属性.
Make sure that myDevice is a properly configured property during your init.
这篇关于如何让 iPhone 4 LED 灯瞬间发光?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!