0

我想在用户启动应用程序时向他们显示图像。此图像显示 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));

    }

}
4

2 回答 2

0

听起来你将不得不做一些事情,其中​​一个特殊的 viewController 在启动时显示,在 loadView 或 init 中获取设备方向,然后适当地设置视图框架,并且基于任何模式纵向或横向,然后只返回允许的方向[shouldAutorotateToInterfaceOrientation:]。

计时器到时后,您可以将控制权传递给其他视图控制器以从那里获取它或随后允许其他方向。

但最重要的是,我认为您将不得不通过最适合您的方案以编程方式执行此操作。

于 2012-07-04T16:56:08.013 回答
0

您应该interfaceOrientation在第一次显示图像时保存初始值(视图控制器上的属性),然后在您的shouldAutorotateToInterfaceOrientation:方法中,仅当方向与初始保存值相同时才返回 YES

计时器完成后,您可以允许旋转到任何支持的方向

于 2012-07-04T16:47:19.743 回答