window
メソッドパラメータを使用している場合は、self.window
を代わりに使用してみてください。ローテーション中にwindow
は_UIInteractiveHighlightEffectWindow
であり、必要でない可能性があります。
supportedInterfaceOrientationsForWindow
には、どのビューコントローラが表示されているかによって異なるUIInterfaceOrientationMask
値を返すコードがあります。ポートレートビューコントローラからランドスケープビューコントローラへのセグの間にwindow
メソッドパラメータで可視のビューコントローラを検出すると、可視コントローラは常にナビゲーションコントローラ、親ビューコントローラ、子ビューコントローラ、または子ビューを持たない汎用UIViewController
クラスでした。
代わりにself.window
を使用している場合、可視のビューコントローラが予想通りでした(ランドスケープで表示する必要があるビューコントローラの1つ)。ここ
は、方法は、回転中に呼び出されるwindow
とself.window
差の例は次のとおり
(lldb) po window.debugDescription
"Optional(<_UIInteractiveHighlightEffectWindow: 0x106325960; frame = (0 0; 667 375); hidden = YES; gestureRecognizers = <NSArray: 0x1c4444a40>; layer = <UIWindowLayer: 0x1c4235c60>>)"
(lldb) po self.window.debugDescription
"Optional(<UIWindow: 0x106409840; frame = (0 0; 667 375); autoresize = W+H; gestureRecognizers = <NSArray: 0x1c0054c40>; animations = { position=<CABasicAnimation: 0x1c02323c0>; bounds.origin=<CABasicAnimation: 0x1c0232480>; bounds.size=<CABasicAnimation: 0x1c02324a0>; }; layer = <UIWindowLayer: 0x1c0223a00>>)"