AVCaptureVideoPreviewLayer falsche Ausrichtung, wenn UI-Rotation deaktiviert ist

8

Ich habe eine AVCaptureVideoPreviewLayer -Instanz zu einer View-Controller-Ansichtshierarchie hinzugefügt.

%Vor%

Der Layerrahmen wird in -viewDidLayoutSubviews method aktualisiert. View-Controller-Ausrichtung ist auf UIInterfaceOrientationMaskLandscapeRight festgelegt.

Das Problem ist wie folgt:

  1. Das Gerät wird im Querformat gehalten
  2. Der View Controller wird modal dargestellt - Video Layer wird korrekt angezeigt.
  3. Das Gerät ist dann gesperrt, und während es gesperrt ist, wird das Gerät in Hochformat gedreht.
  4. Das Gerät wird dann entsperrt , während es sich immer noch im Hochformat befindet und für einige Sekunden wird die Videoebene um 90 Grad gedreht angezeigt. Der Rahmen für die Videoebene ist jedoch korrekt. Alle anderen UI-Elemente werden korrekt angezeigt. Nach einigen Sekunden rastet die Ebene korrekt ein. Hier finden Sie die Grenzen für die Ebenen- und UI-Elemente

Ich habe versucht, die Ausrichtung der Videoebene wie folgt zu aktualisieren (ohne Ergebnisse):

  • Abonnieren von AVCaptureSessionDidStartRunningNotification und UIApplicationDidBecomeActiveNotification Benachrichtigungen
  • ruft das Update auf, wenn -viewWillTransitionToSize:withTransitionCoordinator: method
  • aufgerufen wird
  • auf -viewWillAppear:

Das Problem scheint nicht mit der Ausrichtung der Videoebene selbst verbunden zu sein, sondern eher mit dem Hierarchielayout.

UPDATE:

Wie vorgeschlagen, habe ich auch versucht, die Ausrichtung der Videoebene bei der Änderung der Geräteausrichtung zu aktualisieren, was nicht geholfen hat.

Ich habe auch bemerkt, dass das Problem meistens auftritt, nachdem die Anwendung gestartet wurde und der Bildschirm zum ersten Mal angezeigt wird. Bei nachfolgenden Bildschirmpräsentationen während derselben Sitzung ist die Reproduktionsrate für das Problem sehr niedrig (etwa 1/20).

    
NikGreen 27.04.2017, 13:12
quelle

1 Antwort

3

Probieren Sie diesen Code:

%Vor%     
Sargis Gevorgyan 27.04.2017 13:19
quelle