メインビューと兄弟サブビューを制御するビューコントローラーがあります。1つは、私がoverlayViewと呼んでいるビューで、いくつかのボタンとラベル、およびIBからのものがあります。もう1つはcaptureLayerと呼ばれるもので、Webカメラから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を使用して非常に類似したことを行ったことがあり、このような奇妙なことは何も見られませんでした。