Как сделать так, чтобы светодиод iPhone 4 загорелся мгновенно? - PullRequest
9 голосов
/ 21 октября 2010

В настоящее время я использую приведенный ниже код для включения и выключения индикатора 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];
        }
    }
}

Ответы [ 2 ]

30 голосов
/ 21 октября 2010

Сделайте все (все настройки сеанса и устройства), кроме блока конфигурации флэш-памяти, прежде чем захотите включить светодиод вспышки, во время запуска приложения или просмотра загрузки.

Затем просто включите режим горелки, когда выхочу включить светодиод.Что-то вроде:

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

Убедитесь, что myDevice является правильно настроенным свойством во время инициализации.

1 голос
/ 14 февраля 2014

Немного некромантично, но вот отличная библиотека для этого:

LARSTTorch

...