显示模式视图,其方向与设备的方向不同

时间:2011-12-16 18:20:06

标签: iphone ios orientation modalviewcontroller

我有一个支持所有设备方向的iPhone应用程序,但我有一个特定的模态视图,我只想以横向显示。

如果设备处于横向方向,则可正常工作,但如果设备处于纵向方向,则不会按照我的方式显示。

由于设备处于纵向方向,因此图像被裁剪,左右两侧不在显示屏边缘。由于图像仅与窄尺寸一样高,因此顶部和底部显示父视图的背景。如果我然后将设备旋转到横向,那么一切都很好。

在我的研究中,我经常遇到 shouldAutorotateToInterfaceOrientation ,但我相信这是一个只在设备实际轮换时才会被触发的事件,这不适用于我的情况。该设备在物理上处于纵向方向,但我想将视图显示为横向显示。

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight] 也被提及,但我从未见过,当我尝试使用它时会产生任何影响。

所以我想我的问题是,是否有一种简单的方法可以强制初始显示视图的方向与设备的物理方向不同,以及确切的方法。

我使用以下逻辑来模态显示我的视图:

    TitleViewController *titleController = [[TitleViewController alloc] initWithNibName:@"TitleViewController" bundle:[NSBundle mainBundle]];
    titleController.delegate = self;
    titleController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:titleController animated:YES];
    [titleController release];

我希望始终以横向显示模态视图,即使设备是纵向握持的。

更新

找到一个有效的解决方案:

    if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
    {
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
        self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    }

但是,在处理方向 UIInterfaceOrientationPortraitUpsideDown 时,它最初会以正确的方向显示视图,但之后会将其移回纵向方向并使用剪切的边,并显示图像上方和下方的背景。

我尝试将角度调整为270,-90和其他值,但在 UIInterfaceOrientationPortraitUpsideDown 方向时始终恢复为纵向。

为什么?

3 个答案:

答案 0 :(得分:2)

这种方法做了我需要的一切:

    if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
    {
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
        self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    }

    TitleViewController *titleController = [[TitleViewController alloc] initWithNibName:@"TitleViewController" bundle:[NSBundle mainBundle]];
    titleController.delegate = self;
    titleController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:titleController animated:YES];
    [titleController release];

在显示模态视图之前旋转方向。

我刚刚删除了对 UIInterfaceOrientationPortraitUpsideDown 的支持,因为不需要该方向。

答案 1 :(得分:1)

你试过了吗?

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

当你即将解雇时,改变为肖像

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

答案 2 :(得分:0)

解决方案1:要从初始纵向模式更改启动方向,您需要编辑info.plist文件。添加“intial interface orientation”条目并设置所需的值。

Here是在哪里可以找到info.plist文件的屏幕截图。 (如果链接不起作用,请发表评论)


解决方案2:您也可以在导航控制器中尝试此操作,因为窗口的子视图和方向通知仅发送到“窗口”中的第一个子视图。

//.m file
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Hide status bar
    application.statusBarHidden = YES;
        // --- Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [viewController.view addSubview:navigationController.view];
    [window makeKeyAndVisible];
    return YES;
}