CALayer - 将子层放置在故事板UIButtons下面?

29

我在我的故事板中有一个视图控制器,其中有几个UIButtons。 其中一个按钮激活了在子层中显示的AVFoundation相机预览图层:

captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = self.view.bounds;
[self.view.layer addSublayer:captureVideoPreviewLayer];

除了预览图层在我的按钮上方渲染,以至于尽管按钮仍然可点击,但用户看不到它们的情况外,这个功能运行得很正常。有没有一种简单的方法将子层放在按钮下面?或者将按钮升高在该层中的一种简单方法?非常感谢!

2个回答

55
// put it behind all other subviews
[self.view.layer insertSublayer:captureVideoPreviewLayer atIndex:0];

// or, put it underneath your buttons, as long as you know which one is the lowest subview
[self.view.layer insertSublayer:captureVideoPreviewLayer below:lowestButtonView.layer];

第一个方法可行。但是,为了以后的参考,我该如何找到按钮所在图层的名称? - golmschenk
1
如果您在Interface Builder中添加了按钮,则应将它们连接到视图控制器代码中的IBOutlet,以便您拥有它们的属性。或者,您可以在IB中使用tag属性,然后通过按钮视图的标记找到它们。这样回答了您的问题吗? - stevekohls
我发现[self.view.layer insertSublayer:captureVideoPreviewLayer below:lowestButtonView.layer];在我的情况下工作得更好。 - air_bob

3

补充一下,您可以通过调用UIView 方法 bringSubviewToFront 将任何UIView子类提升到图层中的前面。

[self.view bringSubviewToFront:self.desiredButton];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接