我发现了一个问题: 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
答案 0 :(得分:2)
我找到了答案!答案是 CAReplicatorLayer
overriding mechanism(这不是很快,但可以很容易地在Swift中重新分解)
使用CAReplicatorLayer自动复制图层。正如文档所说,它将自动创建" ...其子图层(源图层)的指定数量的副本,每个副本可能应用了几何,时间和颜色转换。"
除了简单的几何或颜色转换(Think Photo Booth)之外,如果没有与实时预览的大量交互,这是非常有用的。我经常看到CAReplicatorLayer用作创造反射的方法。效果。
以下是一些复制CACaptureVideoPreviewLayer的示例代码:
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)];
注意:这将复制实时预览图层*四次**。*
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。