如何在启动应用程序时锁定方向并在导航到 Viewcontroller 时解锁它
Posted
技术标签:
【中文标题】如何在启动应用程序时锁定方向并在导航到 Viewcontroller 时解锁它【英文标题】:How can I lock the orientation when launching the app and unlock it when navigating to a Viewcontroller 【发布时间】:2012-07-04 16:40:00 【问题描述】:我想在用户启动应用程序时向他们显示图像。此图片将显示 20 秒。
我想要一个功能,当用户在横向启动应用程序时,应用程序保持在横向。当用户以纵向模式启动应用程序时,应用程序将保持纵向模式。
我真的很难在 Appdelegate 中配置这个,所以我制作了一个单独的视图控制器来显示这个图像。计时器结束后,我导航到下一个应启用旋转的视图。
那么如何临时锁定 iPad 的 UI?
编辑:
我通过在我的 Appdelegate 之后的第一个 Viewcontroller 中的 viewDidLoad 中实施方向检查来解决此问题。对于每个方向,我都保存了一个值。执行 shouldAutorotate 时:我首先检查禁用方向更改的保存值。
代码中的解决方案:
- (void)viewDidLoad
[super viewDidLoad];
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"PortraitLandscapeIndicator"];
else
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"PortraitLandscapeIndicator"];
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
//the latest saved orientation is our orientation
if([[NSUserDefaults standardUserDefaults] integerForKey:@"PortraitLandscapeIndicator"] == 1)
return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
else
return ((interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown));
【问题讨论】:
【参考方案1】:听起来你必须做一些事情,在启动时显示一个特殊的 viewController,在 loadView 或 init 中获取设备方向,然后适当地设置视图框架,然后根据纵向或横向模式,它只返回允许来自 [shouldAutorotateToInterfaceOrientation:] 的方向。
计时器到时后,您可以将控制权传递给其他视图控制器以从那里获取它或随后允许其他方向。
但最重要的是,我认为您必须通过最适合您的方案以编程方式执行此操作。
【讨论】:
【参考方案2】:您应该在首次显示图像时保存初始 interfaceOrientation
(视图控制器上的一个属性),然后在您的 shouldAutorotateToInterfaceOrientation:
方法中,仅当方向与初始保存的值相同时才返回 YES
计时器结束后,您可以允许旋转到任何支持的方向
【讨论】:
以上是关于如何在启动应用程序时锁定方向并在导航到 Viewcontroller 时解锁它的主要内容,如果未能解决你的问题,请参考以下文章