2013-04-16 12 views
24

Ho un controller di visualizzazione nel mio storyboard con diversi UIButtons. Uno di loro attiva uno strato AVFoundation fotocamera anteprima mostrato in un sottolivello:CALayer - Posiziona il sottolivello sotto gli UIButtons dello storyboard?

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

Ciò funziona correttamente tranne per il fatto che lo strato di anteprima è resa sulla parte superiore dei miei pulsanti in modo, anche se i pulsanti sono ancora cliccabile non lo sono in grado di essere visto dall'utente. C'è un modo semplice per posizionare il sottolivello sotto i pulsanti? O un modo semplice per alzare i pulsanti nel livello? Grazie mille!

risposta

43

I livelli di pulsante sono tutti sottolivelli dei livelli della vista principale. Avrai bisogno di mettere il tuo livello di anteprima della fotocamera sotto i livelli del pulsante. Prova questo:

// 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]; 
+0

Il primo di quelli ha funzionato. Ma solo per riferimento futuro, come faccio a scoprire il nome degli strati su cui sono posizionati i pulsanti? – golmschenk

+1

Se hai aggiunto i tuoi pulsanti in Interface Builder, dovresti connetterli a un IBOutlet per i pulsanti nel codice del tuo controller di visualizzazione. In questo modo hai proprietà per loro. Oppure, puoi inserire la proprietà ** tag ** in IB e trovarli tramite il tag della vista pulsante. Questo ha risposto alla tua domanda? – stevekohls

+0

Ho trovato '' '[self.view.layer insertSublayer: captureVideoPreviewLayer di seguito: lowestButtonView.layer];' '' funziona meglio per il mio caso –

2

Solo per aggiungere. Puoi aumentare qualsiasi sottoclasse di UIView nel livello chiamando UIView metodo bringSubviewToFront.

[self.view bringSubviewToFront:self.desiredButton]; 
+0

Non funziona per me. Hai provato? – Jaybo