我发现了一个问题:
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自动复制图层。正如文档所说,它将自动创建“ ...指定数量的子层(源层)副本,每个副本都可能应用了几何,时间和颜色转换。”

如果除了简单的几何或颜色转换(想像展位)之外,与实时预览之间没有太多交互,这将非常有用。我最经常看到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中将相同的UIView内容(相机预览和图层)并排渲染为两个VRView的UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42287504/

10-11 04:19