現在、以下のコードを使用して iPhone 4 の LED ライトをオン/オフしていますが、問題なく動作していますが、唯一の問題は、LED をオンにするたびにわずかな遅延があることです。ただし、すぐにオフになります。ストロボのような機能を実装するには、すぐに起動する必要があります。これは、より便利だからです。
Apple のカメラ アプリや他の多くのアプリで、電源ボタンを押すと LED が瞬時にオン/オフすることに気付きました。
「セッション」や「デバイス」などのオブジェクトをインスタンス変数としてView Controllerに追加して、ロード時にiPhoneにこれらのオブジェクトを作成させようとしましたが、うまく機能させることができませんでした.
リンゴの WWDC サンプル コードも調べてみましたが、複雑なコードを解読できないようです。誰かがこれを理解するのを手伝ってくれますか?私はこれを機能させるために約4日間試みてきました.
.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];
}
}
}