Как использовать фонарик в приложении для iPhone? - PullRequest
1 голос
/ 08 декабря 2011

Мне нужно использовать iPhone Flash Light в моем приложении.Но, пока пользователь включает вспышку, камера не делает снимок.Как я могу это сделать?Здесь я приложил свой код.Но когда я включаю вспышку, камера делает снимок.

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];

Где я ошибаюсь в кодировании?Пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

В моем приложении есть кнопка с факелом, в которой используются следующие 3 метода.

- (void)initialiseTorch {

    if (!session) {
        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        session = [[AVCaptureSession alloc] init];
        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
        [session addInput:input];
        AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
        [session addOutput:output];
        [session startRunning];
        [output release];
    }
}

- (void)releaseTorch {  
    if (session) {
        [session stopRunning];
        [session release];
        session = nil;
    }
}

- (void) lightButtonPressed {    

    if (!session) {
        [self initialiseTorch];
    }

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    [session beginConfiguration];
    [device lockForConfiguration:nil];
    if ([device torchMode] == AVCaptureTorchModeOn) {
        [device setTorchMode:AVCaptureTorchModeOff];
    } else {
        [device setTorchMode:AVCaptureTorchModeOn];
    }
    [device unlockForConfiguration];
    [session commitConfiguration];
}

Единственное отличие, которое я вижу между нашими кодами, заключается в том, что вы также настраиваете режим Flash. Также я настраиваю свою сессию, а затем включаю / выключаю фонарик на отдельном этапе beginConfiguration

0 голосов
/ 27 мая 2013

отметьте это ...

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