Вспышка камеры не работает

Пытаюсь сделать расширение для мармелада, которое включает и выключает вспышку камеры в айфоне. Я имею в виду этот ответ на SO об использовании вспышки камеры. Я поставил точный код, который он упомянул, и [device setTorchMode:AVCaptureTorchModeOn]; тоже вызывается. Но вспышка не реагирует, как ни в чем не бывало. Что мне нужно сделать, чтобы заставить его работать как статическая библиотека, чтобы я мог использовать его в своем расширении?

Обновление:-
Я использую iOS-SDK 6.1 для компиляции расширения и тестировал его на iPhone 4 (версия iOS 4.3.1). Но сейчас тестирую на iPhone 5 (версия iOS 6.0.0), и теперь вспышка включается, но не выключается. Думаю, это может помочь.


person noob    schedule 15.05.2013    source источник


Ответы (3)


В коде, который вы скопировали, может быть ошибка. Попробуйте следующее:

-(void)turnOnFlash
{
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        if ([device hasTorch]) {
            [device lockForConfiguration:nil];
            [device setTorchMode:AVCaptureTorchModeOff];
            [device unlockForConfiguration];
        }
}
person dana0550    schedule 15.05.2013
comment
Мне кажется такой же код. Позвольте мне попробовать это, чтобы увидеть, работает ли это. Спасибо - person noob; 15.05.2013

Я не знаю почему, но приведенный ниже код сработал для меня.

void TurnFlashOn_platform(bool turnOn) { 
    AVCaptureDevice* device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if ([device hasTorch]){
        [device lockForConfiguration:nil]; //you must lock before setting torch mode
        [device setTorchMode:turnOn ? AVCaptureTorchModeOn : AVCaptureTorchModeOff];
        [device unlockForConfiguration];
    }
}

Я думаю, должны быть некоторые опечатки. В любом случае спасибо.

person noob    schedule 16.05.2013

Используйте эту функцию для включения и выключения фонарика...

#import <AVFoundation/AVFoundation.h>


- (void) turnTorchOn: (bool) on {

Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if ([device hasTorch] && [device hasFlash]){

        [device lockForConfiguration:nil];
        if (on) {
            [device setTorchMode:AVCaptureTorchModeOn];
            [device setFlashMode:AVCaptureFlashModeOn];
            torchIsOn = YES;
        } else {
            [device setTorchMode:AVCaptureTorchModeOff];
            [device setFlashMode:AVCaptureFlashModeOff];
            torchIsOn = NO;            
        }
        [device unlockForConfiguration];
    }
}
}
person Divyu    schedule 15.05.2013
comment
Теперь это точно тот же ответ, который я имел в виду. Можете ли вы указать, какая проблема может возникнуть при статическом использовании этого метода? - person noob; 15.05.2013
comment
Я не понимаю, с какой реальной проблемой вы сталкиваетесь при использовании этого кода.. можете мне сказать? - person Divyu; 15.05.2013
comment
Это не работает. Вспышка не мигает, несмотря на то, что все методы работают отлично. - person noob; 15.05.2013