2

最新の SDK を使用して iOS アプリを開発しています。

LandscapeRight 方向のみをサポートするカメラ アプリを開発しています。

MainにforViewControllerを追加しました。つまり、 mainにはメイン ビューと、 forと呼ばれる別のビューがあります。UIViewAVCaptureVideoPreviewLayerViewControllervideoPreviewViewAVCaptureVideoPreviewLayer

メソッドで設定しAVCaptureVideoPreviewLayerましたviewWillAppear:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setUpVideo];
}

- (void)setUpVideo
{
    NSLog(@"Set up video");
    if (DataExchanger.cameraManager != nil)
    {
        UIView *view = [self videoPreviewView];
        CALayer *viewLayer = [view layer];
        [viewLayer setMasksToBounds:YES];

        AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:DataExchanger.cameraManager.captureSession];
        CGRect bounds = [view bounds];
        NSLog(@"BOUNDS: %@", NSStringFromCGRect(bounds));

        [newCaptureVideoPreviewLayer setFrame:bounds];
        [newCaptureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

        [viewLayer insertSublayer:newCaptureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]];
    }
}

私はこのログを取得します:

BOUNDS: {{0, 0}, {320, 480}}

しかし、その方向性でUIInterfaceOrientationUIInterfaceOrientationLandscapeRight、これらの値が得られます。

BOUNDS: {{0, 0}, {480, 320}}

もう 1 つの問題は、ビデオが -90 度回転していることです。

このスタックオーバーフローの質問を見つけましたが、- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientationメソッドがトリガーされることはありません。

何が起こっていますか?どうすればこの問題を解決できますか?

4

1 に答える 1

-1
  1. デフォルトの AVCaptureVideoPreviewLayer オブジェクトの向きは横です。
  2. AVCaptureVideoPreviewLayer の向きは、デバイスの向きによって変わりません。手動で変更する必要があります。
  3. 手動で変更するには、プレビュー レイヤーの接続を呼び出して回転させる必要があります。

iOS6:

 AVCaptureConnection *previewLayerConnection=self.newCaptureVideoPreviewLayer.connection;
 if ([previewLayerConnection isVideoOrientationSupported])
   [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight];

< iOS6:

if ([self.newCaptureVideoPreviewLayer isOrientationSupported])   
[self.newCaptureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationLandscapeRight];
于 2013-03-15T12:24:41.290 に答える