如何将相同的Uiview内容(相机预览和层)渲染到两个Uiviews中,以在Swift中以VR耳机并排



我找到了一个问题:如何在iOS Objection-C中并排显示摄像机的两个预览vr应用程序?

但是没有答案。

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

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

我找到了答案!答案是 CarePlicatorLayer
多摄像机喂养(它不是快速的,但可以非常轻松地在swift中重新捕获)

使用CarePlicatorLayer自动复制该图层。正如文档所说,它将自动创建" ...指定数量的子层副本(源层),每个副本都可能具有应用于其上的几何,时间和颜色转换。"

>

除了简单的几何或颜色转换(想想照相亭)之外,与实时预览没有太多互动,这将非常有用。我经常看到Careplicatorlayer用作创建"反射"效果的方法。

这是复制cacaptureVideOpreviewlayer的一些示例代码:

init 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)];

init 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的层作为sublayer。

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

唐斯侧

使用CarePlicatorLayer的缺点是它处理了层复制的所有位置。因此,它将应用于每个实例的任何设置转换,并且都将包含在本身中。例如。将无法在两个单独的单元格上复制AvCaptureVideOpreviewLayer。

最新更新