重新打开AVCaptureSession

时间:2011-10-13 10:44:59

标签: iphone ios cocoa-touch avfoundation avcam

我有一个需要一些照片的应用程序。 我的整个应用程序基于WWDC 2010的AVCam示例代码。 我已经搞砸了很多但是,直到现在我都无法弄清楚如何正确释放相机视图,这会释放相机会话......

我所要做的就是以下几点:

  • 打开相机视图控制器
  • 拍摄一些照片
  • 关闭相机视图控制器
  • 再次打开

第二次推送viewController会话丢失,预览不可用,捕获也不可用。我已发布full example code on github

我的问题解决方法是根本不释放相机,因此Camera View Controller充当Singleton,我认为正确。此外,有了这种行为,当应用程序进入后台(例如电话)时,我无法找到支持相机的方法。

请咨询。如何破坏相机会话?这样做很重要吗?

2 个答案:

答案 0 :(得分:5)

我已将以下讯息添加到AVCamCaptureManager

- (void) destroySession {

    if ([delegate respondsToSelector:@selector(captureManagerSessionWillEnd:)]) {
        [delegate captureManagerSessionWillEnd:self];
    }

    // remove the device inputs
    [session removeInput:[self videoInput]];
    [session removeInput:[self audioInput]];

    // release
    [session release];

    // remove AVCamRecorder
    [recorder release];

    if ([delegate respondsToSelector:@selector(captureManagerSessionEnded:)]) {
        [delegate captureManagerSessionEnded:self];
    }
}

当拿着相机的viewController接近时,我正在调用destroySession(在我的例子中,它是-closeCamera:的{​​{1}}。)

对于完整的工作示例,欢迎您在github.com上下载AVCam-CameraReleaseTest

答案 1 :(得分:0)