2013-04-16 10 views
24

Ich habe einen View-Controller in meinem Storyboard mit mehreren UIB-Tasten. Einer von ihnen aktiviert eine AVFoundation Kameravorschau Schicht in einer Unterschicht gezeigt:CALayer - Unterlayer unter Storyboard UIButtons platzieren?

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

Dies funktioniert korrekt, außer der Tatsache, dass die Vorschau Schicht oben auf meine Knöpfe gerendert wird so, obwohl die Tasten sind noch anklickbar sind sie nicht kann vom Benutzer gesehen werden. Gibt es eine einfache Möglichkeit, die Unterschicht unterhalb der Schaltflächen zu platzieren? Oder eine einfache Möglichkeit, die Schaltflächen in der Ebene anzuheben? Vielen Dank!

Antwort

43

Die Schaltflächenebenen sind alle Unterebenen der Ebenen der Hauptansicht. Sie müssen Ihre Kameravorschauebene unter den Ebenen der Schaltfläche platzieren. Versuchen Sie dies:

// 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

Die erste von denen gearbeitet. Aber wie finde ich den Namen der Layer, auf denen sich die Buttons befinden, nur für eine zukünftige Referenz? – golmschenk

+1

Wenn Sie Ihre Schaltflächen in Interface Builder hinzugefügt haben, sollten Sie sie mit einem IBOutlet für die Schaltflächen in Ihrem View-Controller-Code verbinden. Auf diese Weise haben Sie Eigenschaften für sie. Oder Sie können die Eigenschaft ** tag ** in IB markieren und dann über das Tag der Schaltflächenansicht finden. Hat das deine Frage beantwortet? – stevekohls

+0

Ich fand '' '[self.view.layer einfügenSublayer: captureVideoPreviewLayer unten: lastButtonView.layer];' '' funktioniert besser für meinen Fall –

2

Nur um hinzuzufügen. Sie können jede Unterklasse von UIView in der Ebene aufrufen, indem Sie UIView Methode bringSubviewToFront aufrufen.

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

Funktioniert nicht für mich. Hast Du es versucht? – Jaybo