我的导航堆栈中有两个GPUImageStillCameras - 如果创建了第二个GPUmageStillCameras,它将无法正常工作

时间:2014-09-19 19:45:34

标签: ios iphone gpuimage gpuimagestillcamera

我有一个主要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 个答案:

答案 0 :(得分:0)

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

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

它使用虚拟着色器(包含),因为在GPUImage

的当前版本中,如果没有过滤器,您将无法捕获

请参阅MHCameraManager here