gpt4 book ai didi

ios - 如何在 Swift 中为 VR 耳机并排渲染相同的 UIView 内容(相机预览和图层)到两个 UIView

转载 作者:行者123 更新时间:2023-11-28 18:50:28 25 4
gpt4 key购买 nike

我发现了这个问题: How to show side by side two previews of camera in iOS objective-C for vr app?

但是没有答案。

而且,我正在寻找 Swift 3 中的解决方案。
我还需要在两个预览中渲染相同的额外图层。

因此,我的问题是如何并排镜像 UIView 以播放相机预览或其他传入视频流?在这个阶段我不需要立体视觉。我只需要并排显示相同的内容。就像是: https://itunes.apple.com/ca/app/3d-fpv-stereoscopic-3d-vr/id1008155528?mt=8

最佳答案

我找到答案了!答案是CAReplicatorLayer
Multiple-Camera-Feeds (它不是快速的,但可以非常非常容易地在 Swift 中重新分解)

使用 CAReplicatorLayer 自动复制图层。正如文档所说,它将自动创建“...指定数量的子层副本(源层),每个副本都可能应用几何、时间和颜色变换。”

如果除了简单的几何或颜色变换(Think Photo Booth)之外没有太多与实时预览的交互,这将非常有用。我经常看到 CAReplicatorLayer 被用作创建“反射”效果的方法。

下面是一些复制 CACaptureVideoPreviewLayer 的示例代码:

初始化AVCaptureVideoPreviewLayer

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[previewLayer setFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.view.bounds.size.height / 4)];

初始化CAReplicatorLayer并设置属性

注意:这将复制实时预览层*四次**。*

NSUInteger replicatorInstances = 4;

CAReplicatorLayer *replicatorLayer = [CAReplicatorLayer layer];
replicatorLayer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height / replicatorInstances);
replicatorLayer.instanceCount = instances;
replicatorLayer.instanceTransform = CATransform3DMakeTranslation(0.0, self.view.bounds.size.height / replicatorInstances, 0.0);

添加图层

注意:根据我的经验,您需要将要复制的层作为子层添加到 CAReplicatorLayer。

[replicatorLayer addSublayer:previewLayer];
[self.view.layer addSublayer:replicatorLayer];

缺点

使用 CAReplicatorLayer 的一个缺点是它处理层复制的所有放置。因此它将对每个实例应用任何集合转换,并且它都将包含在自身中。例如。无法在两个单独的单元格上复制 AVCaptureVideoPreviewLayer。

关于ios - 如何在 Swift 中为 VR 耳机并排渲染相同的 UIView 内容(相机预览和图层)到两个 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42287504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com