Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CALayer - Place sublayer below storyboard UIButtons?

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!

like image 210
golmschenk Avatar asked Apr 16 '13 17:04

golmschenk


2 Answers

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]; 
like image 58
stevekohls Avatar answered Oct 05 '22 20:10

stevekohls


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

[self.view bringSubviewToFront:self.desiredButton]; 
like image 23
Sergio Avatar answered Oct 05 '22 21:10

Sergio