Как сделать так, чтобы светодиод iPhone 4 загорелся мгновенно?
В настоящее время я использую приведенный ниже код для включения и выключения светодиодного индикатора iPhone 4, и он отлично работает, но единственная проблема заключается в том, что каждый раз, когда я включаю индикатор, возникает небольшая задержка. Однако он выключается мгновенно. Мне нужно, чтобы он запускался мгновенно, чтобы реализовать стробоскопическую функцию, и потому что это просто более удобно.
Я заметил, что в приложении Apple для камер и многих других приложениях светодиод включается и выключается мгновенно, когда вы нажимаете кнопку питания.
Я попытался добавить некоторые объекты, такие как "session" и "device", в качестве переменных экземпляра в мой контроллер представления, чтобы iPhone создавал эти объекты во время загрузки, однако мне не повезло, чтобы заставить его работать,
Я также пытался посмотреть пример кода WWDC для яблок, но я просто не могу расшифровать их сложный код. Может кто-нибудь, пожалуйста, помогите мне понять это, я пытался около 4 дней, чтобы заставить это работать.
.час
#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];
}
}
}
2 ответа
Сделайте все (все настройки сеанса и устройства), кроме блока конфигурации флэш-памяти, прежде чем включать светодиод вспышки, во время запуска приложения или просмотра загрузки.
Затем просто включите режим горелки, когда вы хотите включить светодиод. Что-то вроде:
[self.myDevice lockForConfiguration:nil];
[self.myDevice setTorchMode:AVCaptureTorchModeOn];
[self.myDevice setFlashMode:AVCaptureFlashModeOn];
[self.myDevice unlockForConfiguration];
Убедитесь, что myDevice является правильно настроенным свойством во время инициализации.
Немного некромантично, но вот отличная библиотека для этого: