iOS 6 中不推荐使用方向

Posted

技术标签:

【中文标题】iOS 6 中不推荐使用方向【英文标题】:Orientation deprecated in iOS 6 【发布时间】:2012-10-31 14:37:59 【问题描述】:

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

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

【问题讨论】:

好吧。这是正确的。但这是你的问题吗?可能会对您有所帮助:***.com/questions/12404556/… 【参考方案1】:

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

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

所以使用:

[[AVCaptureVideoPreviewLayer connection] setVideoOrientation: AVCaptureVideoOrientationLandscapeRight];

AVCaptureVideoPreviewLayer.connection.videoOrientation= AVCaptureVideoOrientationLandscapeRight;

【讨论】:

试过了。在“AVCaptureVideoPreviewLayer”类型的对象中找不到属性“videoOrientation” '因为它在AVCaptureConnection?所以,AVCaptureVideoPreviewLayerconnection 属性。 我为你添加了一个例子:) 希望你不介意@Nikolai Ruhe 不应该是 AVCaptureVideoOrientationLandscapeRight 而不是 UIInterfaceOrientationLandscapeRight 吗?两者似乎都有效。 这不起作用 - 它与更改 .orientation 的效果不同。【参考方案2】:

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

我替换了这个:

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

有了这个:

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

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

【讨论】:

【参考方案3】:

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

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

替换以下内容:

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

与:

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

【讨论】:

以上是关于iOS 6 中不推荐使用方向的主要内容,如果未能解决你的问题,请参考以下文章

不推荐使用 setStatusBarOrientation,如何在 ios10 中更改设备方向

ios9中的强制方向

iOS 6 - 如何在方向改变时运行自定义代码

IOS 6强制设备方向为横向

如何在仅在 iOS-6 中支持横向方向的应用程序中使用 UIImagePickerController?

iOS 7 及更高版本 (8.4) 中不推荐使用 SegmentedControlStyle | Xcode 6.4