2014-02-17 1 views
0

Я использую проект примера AVCam, последнюю версию с начала этого месяца (февраль 2014 г.). Я добавил функциональность выбора вспышки и удалил функцию записи, но я не думаю, что это имеет отношение к проблеме.Инициализация AVCamPreviewView медленная и иногда вызывает сбои после закрытия/повторного открытия - с использованием проекта примера AVCam

При изменении вида и повторного открытия AVCam несколько раз подряд приложение либо выходит из строя, либо требуется, чтобы представление предварительного просмотра было инициализировано (~ 15 секунд). Иногда это происходит.

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

- (void)viewDidDisappear:(BOOL)animated 
{ 
dispatch_async([self sessionQueue], ^{ 
    [[self session] stopRunning]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:AVCaptureDeviceSubjectAreaDidChangeNotification object:[[self videoDeviceInput] device]]; 
     [[NSNotificationCenter defaultCenter] removeObserver:[self runtimeErrorHandlingObserver]]; 

     [self removeObserver:self forKeyPath:@"sessionRunningAndDeviceAuthorized" context:SessionRunningAndDeviceAuthorizedContext]; 
     [self removeObserver:self forKeyPath:@"stillImageOutput.capturingStillImage" context:CapturingStillImageContext]; 
     [self removeObserver:self forKeyPath:@"movieFileOutput.recording" context:RecordingContext]; 
    }); 
} 

Вот мой код для изменения вида (отправки захваченного изображения в на то же самое время) (я загружаю вид с помощью раскадровки действия модального):

-(void)dealWithNewImage:(UIImage*)imageIn { 

    [self saveCamState]; 

    //change view and send us the image 
    UIStoryboard *storyboard = self.storyboard; 
    DrawingController *drawView = (DrawingController *)[storyboard instantiateViewControllerWithIdentifier:@"DrawingView"]; 

    drawView.imageIn = imageIn; 
    [self presentViewController:drawView animated:NO completion:nil]; 

} 

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

Заранее благодарим за любую помощь!

ответ

2

Добавление следующего, в рамках метода viewDidDisappear, после [[self session] stopRunning]; исправил вопрос для меня:

for(AVCaptureInput *input in captureSession.inputs) { 
    [captureSession removeInput:input]; 
} 

for(AVCaptureOutput *output in captureSession.outputs) { 
    [captureSession removeOutput:output]; 
}