UIViewController用代码改变方向

时间:2011-10-16 09:45:07

标签: cocoa-touch uiviewcontroller uiinterfaceorientation interface-orientation

为了获得更好的用户体验,我的代码中包含以下内容:

if (allowLandscape) {
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || toInterfaceOrientation == UIInterfaceOrientationPortrait;
}
else {
    return toInterfaceOrientation == UIInterfaceOrientationPortrait;
}

因此,如果allowLandscape设置为YES,则用户可以在所有典型的设备方向上使用该应用程序。但是allowLandscape可以随时设置为NO,我想将UIViewController旋转回纵向。

以下代码仅在用户手动更改设备方向时有效。因此,如果allowLandscape为YES,他可以旋转设备,界面方向也会随着方向的变化而变化。但如果他保持横向,并且allowLandscape将设置为NO,则他会保持横向方向,直到他将iPhone移动到纵向方向 - 如果allowLandscape仍为NO,则无法更改纵向方向。

我想要完成的是调用一些方法,强制ViewController在可能的情况下用动画刷新它的方向。

调用方法:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];

仅更改状态栏,但界面仍处于上一个方向。我不想使用任何未记录的API。

1 个答案:

答案 0 :(得分:0)

以下是解决方案:

    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

通过添加此代码,视图控制器再次询问,它应在哪个方向显示其视图。