我编写了一个静态框架,在其中我有一个名为ViewfinderViewController的类,该类使用AVCaptureSession设置相机。此ViewController还将AVCaptureVideoPreviewLayer作为子层添加到其自身视图的层中:
// code in ViewfinderViewController.m
previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
previewLayer.frame = self.view.bounds;
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer addSublayer:previewLayer];
视图查找器控制器还进行一些视频处理,并为框架的用户注册了一些委托方法,以防在其中一个处理过的帧中发现或未发现感兴趣的内容。
在我的真实应用程序的viewDidLoad方法中,我创建了一个ViewfinderViewController的实例,设置了它的frame并将它的视图添加为子视图。
// code in the app's view controller viewDidLoad method
ViewfinderViewController *vfVC = [[ViewfinderViewController alloc] init];
vfVC.view.frame = self.view.bounds;
[self.view addSubview:vfVC.view];
这个方案在忽略旋转的情况下运行良好(直到现在我才注意到这一点)。我的主要问题是,ViewfinderViewController.view 调整了它的框架大小,但 AVCaptureVideoPreviewLayer 没有。我有点困惑:难道预览层不应该自动调整大小,因为与其 superLayer 相对应的视图已正确调整大小吗?
有什么想法吗?我很乐意提供更多信息,但为了让问题更简洁,我暂时不会再深入探讨。谢谢。
- (void)layoutSubviews
调用setNeedsLayout
是否有帮助? - Josh Bleecher Snyder