我正在设计一个带有"封面视图"的iOS密码锁库。功能,当应用程序背景时隐藏屏幕上的内容。请参阅此image。
当我的PasscodeManager
收到UIApplicationWillResignActiveNotification
通知时,会执行以下操作:
[UIApplication.sharedApplication.keyWindow addSubview:self.coverView];
这很棒,完全符合我的要求!但是,如果iPad处于横向,则此视图不会旋转,并且在iOS 7多任务预览界面上看起来很糟糕。
我知道UIViewController
处理轮换,但我不确定如何将它用于此目的,因为当应用程序变为背景时,我似乎无法推送UIViewController(它看起来像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,用于在其他窗口之上呈现和解除窗口。当应用程序进入后台时,显示没有动画的锁定窗口。当用户解锁时,用动画解除它。