12

AVCaptureSessionを使用してカメラで画像をキャプチャしたい。

正常に動作します。カメラを起動すると、出力を取得できます。ただし、デバイスを回転させると、ビデオの向きに問題が発生します。

まず、横向きの左向きと右向きをサポートしたいのですが、ポートレートモードになるのは遅すぎるかもしれません。

私は実装します:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation{ 
return UIInterfaceOrientationIsLandscapse(interfaceOrientation);
}

デバイスを回転させると、アプリが横向き左から横向き右に、またはその逆に回転しますが、カメラが正しく見えるのは、横向き左にいるときだけです。アプリが横向きの場合、動画は180度回転します。

どうもありがとうございます。

アップデート:

Spectravideo328の回答を試しましたが、デバイスを回転させようとするとエラーが発生し、アプリがクラッシュします。これはエラーです:

[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210'

次の行でエラーが発生します。

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection;

shouldAutorotateToInterfaceOrientationメソッド内に配置します。このエラーの原因を知っていますか?

ありがとう

4

1 に答える 1

24

デフォルトのカメラの向きは、奇妙なことにUIInterfaceOrientationLeftで十分です。

カメラの向きは、デバイスの回転によって変化しません。それらは別々です。カメラの向きを手動で調整する必要があります。

toInterfaceOrientationを渡すメソッドに次のように入力します(デバイスが回転し、カメラが回転するように、上記のshouldAutorotateToInterfaceOrientationから呼び出す場合があります)。

最初にプレビューレイヤー接続を取得する必要があります

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection;

if ([previewLayerConnection isVideoOrientationSupported])
{
    switch (toInterfaceOrientation)
    {
        case UIInterfaceOrientationPortrait:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];
            break;
        case UIInterfaceOrientationLandscapeRight:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; //home button on right. Refer to .h not doc
            break;
        case UIInterfaceOrientationLandscapeLeft:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; //home button on left. Refer to .h not doc
            break;
        default:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait]; //for portrait upside down. Refer to .h not doc
            break;
    }
}
于 2013-02-11T12:34:31.767 に答える