私は、ビューコントローラのビュー階層に追加AVCaptureVideoPreviewLayer
インスタンスを持っています。AVCaptureVideoPreviewLayer誤った向きUI回転が無効になっている
-viewDidLayoutSubviews
メソッドでレイヤーフレームが更新されます。ビューコントローラの向きがUIInterfaceOrientationMaskLandscapeRight
にロックされています。
問題は、次の通りである:
- 装置が横向き
- ビューコントローラがモーダル提示さに保持される - 正しくビデオレイヤーディスプレイ。
- デバイスは、その後、ロックされ、それがロックされている間、デバイスが縦向きに回転されます。
- 依然として縦方向に、数秒間であるビデオ層は90度回転表示されている間、デバイスは、次にロック解除されます。ただし、ビデオレイヤのフレームは正しいです。他のすべてのUI要素は正しく表示されます。数秒後、レイヤーが正しい向きにスナップします。
下の層とUI要素の境界を見つけてください、私は(結果なしで)次のようにビデオ層の向きを更新する試みた:
AVCaptureSessionDidStartRunningNotification
とUIApplicationDidBecomeActiveNotification
通知に加入-viewWillTransitionToSize:withTransitionCoordinator:
メソッドが呼び出されたときに更新を呼び出す-viewWillAppear:
問題は、ビデオ層の向き自体に接続されていないようですが、より多くの階層のレイアウトを表示します。
UPDATE:
示唆したように、私も助けていないデバイスの向きの変更のビデオ層の向きを更新してみました。
私はまた、アプリケーションが起動され、画面が最初に提示された後、問題が主に起こることに気づきました。同じセッション中、後続の画面プレゼンテーションでは、問題の再生率が(1/20のようなもの)は本当に低いです。
登録enterForeground通知のために、FUNCのfixOrientationを追加()メソッドでは、viewWillAppear上とenterForegroundにそれを呼び出す: UIDevice.current.setValue(のNSNumber(値:UIInterfaceOrientation。私はこのコードをObj-cで数年前に使っていましたので、テストしていないほどのコメントを書いています – SeanLintern88