0

我有一个应用程序,其中包含一个主要的应用程序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调用该方法时。有什么方法可以强制它刷新(除了重新创建它之外) ? 我已经检查过了——它也没有被释放。

我错过了什么?

4

1 回答 1

0

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

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

它使用了一个虚拟着色器(包括在内),因为在当前版本的GPUImage

请参阅此处的 MHCameraManager

于 2014-09-30T16:32:01.317 回答