0

我有故事板,它有一个标签栏控制器。当设备旋转时,我想移动到不同的屏幕,即不横向显示相同的布局,而是显示完全不同的东西。

在 iOS 5 中,我使用 UITabBarControllerDelegate 中的以下代码实现了这一点

- (BOOL)shouldAutorotateToInterfaceOrientation:      (UIInterfaceOrientation)interfaceOrientation
{
    if(interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {    
        [self performSegueWithIdentifier: @"toGraph" sender: self];
    }

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

在 iOS 6 中不再调用此方法。我可以看到的所有方法都在视图旋转时处理,但在设备旋转时不处理。

提前致谢。

4

2 回答 2

2

所以真的我不应该一直在寻找视图旋转,而是设备旋转。在发现 UIDevice 类之后,我能够使用 AlternateViews 示例代码(只需在文档管理器中搜索 AlternateViews)来获得我需要的一切。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.delegate = self;

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

}

- (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(showGraphs) withObject:nil afterDelay:0];
}

- (void)showGraphs
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
    {
        [self performSegueWithIdentifier: @"toGraph" sender: self];
        isShowingLandscapeView = YES;
    }

    else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
    {
        [self dismissModalViewControllerAnimated:YES];
        isShowingLandscapeView = NO;
    }
}
于 2012-09-29T10:42:25.297 回答
0

iOS 6 中的自动旋转发生了变化。以下是 Apple 开发论坛上有关此问题的主题:https ://devforums.apple.com/thread/166544?tstart=30

这里还有一些线程: http ://www.buzztouch.com/forum/thread.php?tid=41ED2FC151397D4AD4A5A60¤tPage=1

https://www.buzztouch.com/forum/thread.php?fid=B35F4D4F5EF6B293A717EB5&tid=B35F4D4F5EF6B293A717EB5

这些与您的问题最相关的帖子似乎如下:

得到它的工作......对于选项卡式应用程序,替换了 appDelegate 中的这一行:[self.window addSubview:[self.rootApp.rootTabBarController view]];

用这个:[self.window.rootViewController = self.rootApp.rootTabBarController view];

并获得非选项卡式应用程序,替换这一行: [self.window addSubview:[self.rootApp.rootNavController view]];

用这个:[self.window.rootViewController = self.rootApp.rootNavController view];

于 2012-09-29T05:03:29.613 回答