当设备方向从纵向更改为横向时,使用新的uiview填充整个横向屏幕

时间:2012-06-13 01:21:35

标签: iphone ios uiview rotation orientation

所以我的iPhone应用程序目前有一个tabviewcontroller,可以填充整个屏幕。该应用仅以纵向模式运行。我的任务是检测设备方向的变化,一旦它改变为横向,就可以在整个屏幕上填充新的uiview。

我已经进行了设备方向更改检测。一旦检测到方向更改,我已经使用NSNotificationCenter成功调用辅助方法deviceOrientationChanged。如果更改为横向模式,我会运行一段代码。

在这段代码中,我已经尝试了各种各样的东西,但都没有成功。简单地说self.view = newViewThing;不起作用,因为状态栏仍然存在于顶部,并且选项卡仍然位于底部。 我也尝试将这个newViewThing作为子视图添加到UIWindow。这不起作用,因为添加视图时,它没有正确定位。

问题是:一旦检测到设备方向改变,有没有办法加载全新的uiview?提前谢谢。

1 个答案:

答案 0 :(得分:1)

是的,有一种方法可以加载新视图。我在我的应用程序中这样做:

- (void)orientationChanged:(NSNotification *)notification
{
    // We must add a delay here, otherwise we'll swap in the new view
    // too quickly and we'll get an animation glitch
    [self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0];
}

- (void)updateLandscapeView
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
    {
        [self presentModalViewController:self.landscapeView animated:YES];
        isShowingLandscapeView = YES;
    }
    else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
    {
        [self dismissModalViewControllerAnimated:YES];
        isShowingLandscapeView = NO;
    }    
}

此外,我已将此代码添加到viewDidLoad

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification object:nil];

此代码发送到dealloc

[[NSNotificationCenter defaultCenter] removeObserver:self];
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];