特定のビューを常に縦向きモードのままにしたい場合に、自動回転に問題があります。
私が見つけた1つの提案は、次のように横向きの回転が検出されたときにビューを元に戻すことでした:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
float rotation;
if (toInterfaceOrientation==UIInterfaceOrientationPortrait) {
rotation = 0;
}
else
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) {
rotation = M_PI_2;
}
else
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) {
rotation = -M_PI_2;
}
videoWindow.transform = CGAffineTransformMakeRotation(rotation);
openGLView.transform = CGAffineTransformMakeRotation(rotation);
}
その結果、ユーザーが横向きモードに変更するたびに、ビデオ ビューが正しく回転して元に戻るため、最初から回転していないかのように見えます。
私の問題は OpenGL ビューにあります。それを元に戻すと、OpenGL 図面の内容がゆがんで失敗し、ログに「Failed to make complete framebuffer object 8cd6」というエラーが表示されます。
ここで、前のコードにコメントを付けて、viewcontroller に OpenGL ビューを自動回転させると、回転し、何も歪まなくなります (ただし、ランドスケープでは測定値が収まりません。
だから私の質問は、デバイスの回転が検出されたときにAppleが物事をどのように回転させ、正確なプロセスを逆方向にシミュレートして、シミュレートされた回転ロックされたOpenGLビューを実現できるかです。