В настоящее время я использую приведенный ниже код для включения и выключения индикатора iPhone 4, и он отлично работает, но единственная проблема заключается в том, что каждый раз, когда я включаю индикатор, возникает небольшая задержка.Однако он выключается мгновенно.Мне нужно, чтобы он срабатывал мгновенно, чтобы реализовать стробоподобную функцию, и потому что это просто удобнее.
Я заметил, что в приложении Apple для камеры и во многих других приложениях светодиод включается и выключается мгновенно, когда вы нажимаетекнопка включения.
Я попытался добавить некоторые объекты, такие как "session" и "device", в качестве переменных экземпляра в мой контроллер представления, чтобы 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];
}
}
}