captureStillImageAsynchronouslyFromConnection: stillImageConnection completeHandler не всегда вызывается - PullRequest
4 голосов
/ 05 января 2012

Я скачал демо AVCam с сайта Apple и попытался добавить простой стартовый экран (я добавил StartViewController. {H, m, nib}) с кнопкой, которая затем запустила демоверсию AVCam,Код для кнопки выглядит следующим образом (все остальное - просто материал по умолчанию, созданный с помощью xcode):

-(IBAction) btnClicked:(id) sender {
    viewController =
    [[AVCamViewController alloc]
        initWithNibName: @"AVCamViewController"
        bundle:nil];

    [UIView beginAnimations:@"flipping view" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
                       forView:self.view
                         cache:YES];
    [self.view addSubview:viewController.view];
    [UIView commitAnimations];
}

Каким-то образом после добавления этого пера фотографирование не работает постоянно (иногда изображение не заканчиваетсяв камеру катиться).Я добавил некоторые операторы журнала к captureStillImage в captureStillImageAsynchronouslyFromConnection: stillImageConnection завершениюHandler и заметил, что этот завершениеHandler не всегда вызывается.Странно то, что иногда он работает.Я думаю, что я делаю что-то не так, но не знаете что?Я тестирую это на iPhone под управлением 4.2.1.

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Убедитесь, что AVCaptureSession работает при вызове captureStillImageAsynchronouslyFromConnection:stillImageConnection

1 голос
/ 29 декабря 2013

Ну, я столкнулся с аналогичной проблемой, когда captureStillImageAsynchronouslyFromConnection:stillImageConnection выдвигал исключение, что переданный connection недействителен. Позже я понял, что когда я набрал properties для сессии и stillImageOutPut для сохранения значений, проблема была решена.

0 голосов
/ 28 января 2015

Для меня эта проблема возникла ТОЛЬКО на одноядерном iPhone 4, и когда я пытаюсь сделать снимок с помощью AVCaptureSessionPresetHigh.

Я попробовал AVCaptureSessionPresetPhoto, и эта проблема исчезла.Но мне не нужно полноразмерное фото, поэтому я выбрал другое решение.

Я поместил captureStillImageAsynchronouslyFromConnection в основной очереди.Примерно так

dispatch_async(sessionQueue) {

    // do whatever before capturing

    dispatch_async(dispatch_get_main_queue) {
        captureStillImageAsynchronouslyFromConnection {
            // do whatever after capturing
        }
    }
}

Не уверен, почему существует эта проблема, и не уверен, почему этого можно избежать.Но я надеюсь, что это может кому-то помочь.

...