Две GPUImageStillCameras в моем стеке навигации - одна не будет работать, если будет создана вторая

У меня есть приложение с основным UIViewControllerи вторичный, который должен быть представлен модально после нажатия кнопки.

Оба из UIViewControllers есть свои GPUImageStillCamera с соответствующим GPUImageView добавлено как подпредставление. До этого момента все работало нормально.

Тем не менее, когда я иду на модально представлены UIViewController и закройте его, камера на моем основном контроллере останется замороженной на последнем кадре, в котором я его оставил, прежде чем представить второй контроллер.

Что я называю в PrimaryViewController

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    [_stillCamera resumeCameraCapture];
}

-(void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];

    [_stillCamera pauseCameraCapture];
}

Что я называю в моем SecondaryViewController

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    [_stillCamera resumeCameraCapture];
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];

    [_stillCamera stopCameraCapture];
}

Я на 100% уверен, что методы запускаются (проверено с помощью точек останова). По логике вещей, первая камера должна просто возобновить предварительный просмотр после повторного просмотра, но это не так - она ​​останавливается на последнем кадре (когда pauseCameraCapture метод называется. Есть ли какой-нибудь способ заставить его обновиться (кроме воссоздания его снова)? Я проверил - он также не освобожден.

Что мне не хватает?

1 ответ

Решение

Я закончил с созданием класса Singleton, который содержит один экземпляр GPUImageStillCamera в живых. Он также сохраняет все фильтры и обрабатывает паузу / возобновление, когда приложение меняет состояние.

Синглтон также способен вернуть GPUImageView экземпляр для предварительного просмотра камеры и уничтожения ее, когда она вам больше не нужна.

Он использует фиктивный шейдер (в комплекте), потому что вы не сможете захватывать без фильтра в текущей версии GPUImage

Смотрите MHCameraManager здесь.

Другие вопросы по тегам