我找到了答案!答案是 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。