【问题标题】:Two GPUImageStillCameras in my navigation stack - one won't work if the second one is created我的导航堆栈中有两个 GPUImageStillCameras - 如果创建第二个,一个将无法工作
【发布时间】:2014-11-14 11:40:47
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • 尝试更改主 VC 以使用“将”出现/消失而不是“已”出现/消失。不确定它是否会有所帮助,但值得一试。

标签: ios iphone gpuimage gpuimagestillcamera


【解决方案1】:

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

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

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

MHCameraManager here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2013-07-23
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多