我的导航堆栈中的两个GPUImageStillCameras-如果创建了第二个,则一个将无法工作



我有一个应用程序,它有一个主UIViewController和一个辅助CCD_1,用于在点击按钮后以模式显示。

两个CCD_ 2都具有它们自己的CCD_。到目前为止一切都很顺利。

然而,当我转到模式呈现的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方法时)。有没有办法强制它刷新(除了重新创建它)?我查过了,它也没有被解除分配。

我错过了什么?

我最终创建了一个Singleton类,它使GPUImageStillCamera的一个实例保持活动状态。它还保留了所有过滤器,并在应用程序更改状态时处理暂停/恢复。

Singleton还能够返回一个GPUImageView实例来预览相机,并在您不再需要它时将其销毁。

它使用了一个虚拟着色器(包括在内),因为在当前版本的GPUImage 中,如果没有过滤器,您将无法捕获

请参阅此处的MHCameraManager。

相关内容

最新更新