2010-07-15 5 views

ответ

15

Используйте следующее:

AVCaptureSession * session = [[AVCaptureSession alloc] init]; 

[session beginConfiguration]; 

AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

if ([device hasTorch] && [device hasFlash]){ 
[device lockForConfiguration:nil]; 
[device setTorchMode:AVCaptureTorchModeOn]; 
[device setFlashMode:AVCaptureFlashModeOn]; 
[device unlockForConfiguration]; 

AVCaptureDeviceInput * flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; 
if (flashInput){ 
    [session addInput:flashInput]; 
} 
    AVCaptureVideoDataOutput * output = [[AVCaptureVideoDataOutput alloc] init]; 
    [session addOutput:output]; 
     [output release]; 
    [session commitConfiguration]; 
    [session startRunning]; 
} 
[self setTorchSession:session]; 
[session release]; 

(Из discussion на iPhoneDevSDK)

+0

Спасибо, Итак, я добавил кнопку в viewcontroller.xib в interfacebuilder. Как заставить кнопку запускать и останавливать фонарик? –

+0

Сделайте IBOutlet для IBAction и подключите его к селектору кнопки. Затем в IBAction, в зависимости от того, включен ли светодиод, вызовите код или вызовите измененную версию кода, заменив все входящие в него выходы. – jrtc27

+0

Вы проверили мой другой пост? Я добавил IBOutlet и IBActon, но я не знаю, как добавить свой код к кнопке. Можете ли вы посмотреть и помочь мне и показать, как добавить код к кнопке. Я знаю, что мне нужно изменить; [устройство setTorchMode: AVCaptureTorchModeOn]; [устройство setFlashMode: AVCaptureFlashModeOn]; К [устройство setTorchMode: AVCaptureTorchModeOff]; [устройство setFlashMode: AVCaptureFlashModeOff]; Вы можете посмотреть на мой код в другом посте и показать мне, как это сделать, вы можете по электронной почте мне holmes2870 @ yahoo.com Я новичок в этом так иметь терпение ... Спасибо David H –

29

Вот сокращенный вариант теперь вы можете использовать, чтобы включить индикатор включения или выключения:

- (void)torchOnOff: (BOOL) onOff 
{ 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([device hasTorch]) { 
     [device lockForConfiguration:nil]; 
     [device setTorchMode: onOff ? AVCaptureTorchModeOn : AVCaptureTorchModeOff]; 
     [device unlockForConfiguration]; 
    } 
} 

ОБНОВЛЕНИЕ: (март 2015 г.)

Вы также можете установить яркость фонарика:

- (void)setTorchToLevel:(float)torchLevel 
{ 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([device hasTorch]) { 
     [device lockForConfiguration:nil]; 
     if (torchLevel <= 0.0) { 
      [device setTorchMode:AVCaptureTorchModeOff]; 
     } 
     else { 
      if (torchLevel >= 1.0) 
       torchLevel = AVCaptureMaxAvailableTorchLevel; 
      BOOL success = [device setTorchModeOnWithLevel:torchLevel error:nil]; 
     } 
     [device unlockForConfiguration]; 
    } 
} 
+1

Вам нужно всего лишь запустить сеанс, если вы используете этот код в версиях iOS до 5,0 – mahboudz

+0

Это работает на iOS 5.1, старый ответ - нет. –

+0

Не могли бы вы прокомментировать, с какими версиями это работает? –

Смежные вопросы