我有一个视图控制器控制一个主视图和同级子视图。一个是我称之为 overlayView 的视图,它有一些按钮和标签以及来自 IB 的东西。另一个是名为 captureLayer 的,我以编程方式添加它以保存来自网络摄像头的 AVCaptureVideoPreviewLayer。出于某种原因,我无法让叠加层显示在预览层的顶部。
这不起作用:
capturePreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
[self setCaptureView:[[NSView alloc] initWithFrame:[[self view] bounds]]];
// I know the order here is important and I think this is right
[[self captureView] setLayer:capturePreviewLayer];
[[self captureView] setWantsLayer:YES];
[[self view] addSubview:[self captureView] positioned:NSWindowBelow relativeTo:[self overlayView]];
[captureSession startRunning];
但是我发现将 capturePreviewLayer 放在主视图中,因此 overlayView 是子视图而不是其视图的兄弟,确实有效:
capturePreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
[[self view] setLayer:capturePreviewLayer];
[[self view] setWantsLayer:YES];
[captureSession startRunning];
知道为什么吗?我什至在 iOS 中使用 UIViews 做了一个非常类似的事情,并没有看到任何奇怪的东西。