Две 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 здесь.