旋转添加到keyWindow的UIView

时间:2014-03-13 23:09:02

标签: ios ipad uiviewcontroller rotation uiwindow

我正在设计一个带有"封面视图"的iOS密码锁库。功能,当应用程序背景时隐藏屏幕上的内容。请参阅此image

当我的PasscodeManager收到UIApplicationWillResignActiveNotification通知时,会执行以下操作:

[UIApplication.sharedApplication.keyWindow addSubview:self.coverView];

这很棒,完全符合我的要求!但是,如果iPad处于横向,则此视图不会旋转,并且在iOS 7多任务预览界面上看起来很糟糕。

我知道UIViewController处理轮换,但我不确定如何将它用于此目的,因为当应用程序变为背景时,我似乎无法推送UIViewController(它看起来像2视图控制器在彼此的顶部,每一半都可见)。

2 个答案:

答案 0 :(得分:1)

UIViewController负责旋转视图。如果您要将子视图直接添加到窗口,则无法获得该行为。因此,您有两种选择:使用UIViewController,或自己处理轮换。如果你想自己处理它,你可以听UIDeviceOrientationDidChangeNotification。您可能还需要致电beginGeneratingDeviceOrientationNotifications。见https://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

答案 1 :(得分:1)

不要将子视图添加到关键窗口。这很乱,您不会听到方向更改,也不会隐藏不同窗口中显示的警报视图和其他元素。

相反,显示另一个窗口级别较高的窗口(例如UIWindowLevelAlertView)。该视图将具有自己的视图控制器,它将正常听到所有旋转通知。

看一下我的LNWindowManager助手班。您可以将它用作一个简化的API,用于在其他窗口之上呈现和解除窗口。当应用程序进入后台时,显示没有动画的锁定窗口。当用户解锁时,用动画解除它。