2016-04-24 9 views
0

Ich versuche AVfoundation Grundlagen zu lernen. Momentan versuche ich, die einfachste Demo für eine benutzerdefinierte Kamera zu erstellen. Das allgemeine Schema ist also für AVCaptureVideoPreviewLayerLayout-Problem bei der Verwendung von AVCaptureVideoPreviewLayer

UIView als Behälter zu verwenden ich eine previewLayer auf folgende Weise erstellen:

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 

Als folgend ich dies tun:

previewLayer?.frame = self.imageView.bounds   
self.imageView.layer.addSublayer(previewLayer) 
captureSession.startRunning() 

Das ist im Grunde es . Als Ergebnis wird die captureSession ausgeführt, aber die Kameravorschau ist innerhalb der UIView visuell falsch platziert. Bitte beachten Sie, das Bild unten Misplaced camera preview

Allerdings habe ich fast sicher, dass ich alles richtig im Storyboard tat Storyboard Es tut mir leid, weiß ich nicht, was hinzuzufügen, da ich in schnellen relativ neu bin. Bitte lassen Sie mich wissen, wenn ich irgendwelche Informationen vermisse, die ich beantworten muss.

Also die Frage ist, was könnte der Grund für diese Art von UI-Verhalten sein?

Vielen Dank im Voraus.

Antwort

0

Zuerst, vorausgesetzt, Sie verwenden Autolayout, stellen Sie sicher, dass Ihre Einschränkungen für Ihre Ansichten im Storyboard korrekt sind. Wenn Sie kein Autolayout verwenden, würde ich Ihnen empfehlen, dies zuerst zu tun, bevor Sie fortfahren.

Sie müssen den Rahmen für Ihre AVCaptureVideoPreviewLayer nach dem Hinzufügen zu der imageView setzen.

previewLayer.frame = self.imageView.layer.bounds 

Ich denke, dass sollte sich darum kümmern. Wenn Sie Ihr Gerät drehen, müssen Sie möglicherweise die size der previewLayer in Ihrem View Controller viewWillLayoutSubviews aktualisieren.

+0

Hallo. Danke für deine Antwort. Ich habe das getan, was Sie vorgeschlagen haben, indem Sie nach dem Hinzufügen der Vorschauebene layer.bounds zuweisen. Es hat nicht funktioniert. Und ja, ich benutze AutoLayout. Ich freue mich zu wissen, ob Sie noch andere Ideen haben. Danke –

+0

Stellen Sie sicher, dass Ihre ImageView richtig positioniert ist. Sie können einen Haltepunkt festlegen und auf diese Weise überprüfen. Sie können auch den 'previewLayer'-Rahmen überprüfen. Sie können auch Xcode Debug/View Debuggen verwenden. – stevekohls

+0

OK, werde ich das untersuchen. Wenn einer dieser Arbeiten funktioniert, werde ich Ihre Antwort akzeptieren. Vielen Dank –

2

Sie müssen nach Ansicht des Content-Modus einzustellen:

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;