CALayer - Place sublayer below storyboard UIButton

2019-04-03 03:46发布

I've got a view controller in my storyboard with several UIButtons. One of them activates an AVFoundation camera preview layer shown in a sublayer:

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

This works correctly except for the fact that the preview layer is rendered on top of my buttons so even though the buttons are still clickable they are not able to be seen by the user. Is there an easy way to place the sublayer below the buttons? Or an easy way to raise the buttons up in the layer? Thank you much!

2条回答
男人必须洒脱
2楼-- · 2019-04-03 04:11

Just to add. You can raise any subclass of UIView up in the layer by calling UIView method bringSubviewToFront.

[self.view bringSubviewToFront:self.desiredButton];
查看更多
地球回转人心会变
3楼-- · 2019-04-03 04:34

The button layers are all sublayers of the main view's layers. You'll need to put your camera preview layer below the button's layers. Try this:

// 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];
查看更多
登录 后发表回答