2011-10-13 72 views
5

我有一个应用程序,需要一些照片。 我的整个应用程序基于来自WWDC 2010的AVCam示例代码。 我搞砸了很多,但直到现在我无法弄清楚如何正确释放相机视图,从而释放相机会话。 。重新打开AVCaptureSession

所有我想要做的是以下几点:

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

第二次我推视图控制器会话丢失,预览不可用,捕获也不可用。我已发布full example code on github

我的问题的解决方法是不释放相机,所以相机视图控制器充当单身人士,我认为这是而不是正确的方法。此外,有了这种行为,我无法找到一种方式来支持相机应用程序去背景(例如电话)。

请指教。我如何毁坏相机会话?这么做很重要吗?

回答

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]; 
    } 
} 

我打电话destroySession时的viewController拿着相机接近(在我的例子是的AVCamViewController-closeCamera:)。

有关完整工作示例,欢迎您来下载github.com AVCam-CameraReleaseTest

+0

上调用恢复会话就能帮助很多thx。如果你使用AVCam作为ModalViewController,你可以在dealloc方法中调用[captureManager destroySession]。 – lukaskrieger

0
+0

我已经有了拍摄照片的应用程序,并将其保存到库......至于我写的,问题是,怎么办我正确关闭会议,以便它可以重新打开? – EladG

+2

我也遇到了这个问题,但是我通过做这个事情得到了解决方案[session removeInput:input]; input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:nil]; [session addInput:input];我删除了先前的输入,然后添加新的它帮助我每次分配一个新的输入,并且我可以每次点击打开和关闭相机时的新图片,并且我已经在视图中完成了它,而不是在单例类中还有一件事我不在塑造我的相机视图我只是添加它,我希望它可以帮助你 – Ballu

+0

谢谢Ballu!你的评论帮助我解决了这个问题!只要我修复了我的“VideoPreviewView”的显示问题,我就会发布完整的答案。 – EladG