5

写真を撮るアプリがあります。私のアプリケーション全体は、WWDC 2010のAVCamサンプルコードに基づいています。私はそれを何度もいじりましたが、これまで、カメラセッションを解放するカメラビューを適切に解放する方法を理解できませんでした...

私がやろうとしているのは次のことだけです。

  • カメラビューコントローラーを開く
  • 写真を撮る
  • カメラビューコントローラーを閉じる
  • もう一度開きます

2回目にviewControllerをプッシュすると、セッションが失われ、プレビューが利用できなくなり、キャプチャも利用できなくなります。完全なサンプルコードをgithubで公開しました。

この問題の回避策は、カメラをまったく解放しないことでした。そのため、Camera View Controllerはシングルトンとして機能しますが、これは正しい方法ではないと思います。さらに、この動作では、アプリケーションがバックグラウンドに移行したときにカメラをサポートする方法を見つけることができませんでした(たとえば電話)。

アドバイスしてください。カメラセッションを破棄するにはどうすればよいですか?そうすることは重要ですか?

4

2 に答える 2

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が近づくと呼び出します(私の例で-closeCamera:AVCamViewController)。

完全に機能する例については、github.comでAVCam-CameraReleaseTestをダウンロードしてください

于 2011-11-07T08:46:19.980 に答える
0

G

それはあなたが見てみるのに役立つかもしれないと思います。

http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/

于 2011-10-13T12:36:10.890 に答える