5

看起来 avcapturevideopreviewlayer 的方向在 iOS 6 中已被贬低。有人知道新代码吗?这是我当前(折旧)的代码:

[self setPreviewLayer:[[AVCaptureVideoPreviewLayer alloc] initWithSession:[self captureSession]]];
[[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill];
previewLayer.orientation = UIInterfaceOrientationLandscapeRight;
4

3 回答 3

19

你检查过文档吗?只有一行:

图层的方向。(在 iOS 6.0 中已弃用。请改用videoOrientation (AVCaptureConnection)。)

所以使用:

[[AVCaptureVideoPreviewLayer connection] setVideoOrientation: AVCaptureVideoOrientationLandscapeRight];

或者

AVCaptureVideoPreviewLayer.connection.videoOrientation= AVCaptureVideoOrientationLandscapeRight;
于 2012-10-31T14:54:01.970 回答
3

我尝试使用 videoOrientation(AVCaptureConnection) 而不是已弃用的方向(AVCaptureVideoPreviewLayer),但它不再旋转视频预览。

我替换了这个:

AVCaptureVideoPreviewLayer *previewLayer = ...;
previewLayer.orientation = AVCaptureVideoOrientationLandscapeRight;

有了这个:

AVCaptureVideoPreviewLayer *previewLayer = ...;
previewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;

但它没有旋转视频预览。问题是我在将 AVCaptureDeviceInput 添加到我的 AVCaptureSession 之前添加并修改了 AVCaptureVideoPreviewLayer。因此我的 AVCaptureVideoPreviewLayer 的连接为空。解决方案是在我将 AVCaptureDeviceInput 添加到我的 AVCaptureSession 之后添加 AVCaptureVideoPreviewLayer。

于 2014-05-07T09:27:17.877 回答
0

就像@Nikolai 发布的那样,请改用 AVCaptureVideoPreviewLayer 的连接videoOrientation属性。

(我再次发布这个的原因是因为他的代码可能有点混乱,因为它看起来像是connection一个类方法。希望这个例子能说明问题。)

替换以下内容:

AVCaptureVideoPreviewLayer *previewLayer = ...;
previewLayer.orientation = UIInterfaceOrientationLandscapeRight;

和:

AVCaptureVideoPreviewLayer *previewLayer = ...;
previewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
于 2014-03-05T02:50:20.123 回答