简体   繁体   English

UITabBar 在旋转时更改所有视图

[英]UITabBar change all views on rotate

I have a tab bar controller with multiple views.我有一个带有多个视图的标签栏 controller。 Each of the views has a toolbar.每个视图都有一个工具栏。 I added code to apply a background image to the toolbar.我添加了将背景图像应用到工具栏的代码。

I also added code, in viewdidLoad, on each view to fire when the device is rotated so I can apply a different background image for landscape mode:我还在 viewdidLoad 中添加了代码,以便在设备旋转时触发每个视图,这样我就可以为横向模式应用不同的背景图像:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self selector:@selector(didRotate:)
name:@"UIDeviceOrientationDidChangeNotification" object:nil];

If I run the app and rotate, the first view works, but then going to other tabs causes the didRotate method to not fire, since the device has already rotated.如果我运行应用程序并旋转,第一个视图可以工作,但随后转到其他选项卡会导致 didRotate 方法不触发,因为设备已经旋转。

How can I make all the views update when the device rotates?如何在设备旋转时更新所有视图?

What you should do is to check the interfaceOrientation on viewWillAppear: and re-layout the UI if needed.您应该做的是检查viewWillAppear:上的interfaceOrientation : 并在需要时重新布局 UI。

You do not necessarily need notifications.您不一定需要通知。 You can accomplish this using the two methods您可以使用两种方法完成此操作

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation 
                                duration:(NSTimeInterval)duration

and

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

For example, to make the tabBar hide in landscape mode but not in portrait, use this:例如,要让 tabBar 在横向模式下隐藏而不是纵向模式,请使用以下命令:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    return YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation 
                                duration:(NSTimeInterval)duration
{
        if (toOrientation == UIInterfaceOrientationLandscapeLeft ||
            toOrientation == UIInterfaceOrientationLandscapeRight) {
            [[self view] endEditing:YES];
            [[self view] addSubview:graphView];
            //[[UIApplication sharedApplication] setStatusBarHidden:TRUE withAnimation:FALSE];
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
            [self.navigationController setNavigationBarHidden:TRUE animated:TRUE]; 
        }       

}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    UIInterfaceOrientation toOrientation = self.interfaceOrientation;

    if ( self.tabBarController.view.subviews.count >= 2 )
    {
        UIView *transView = [self.tabBarController.view.subviews objectAtIndex:0];
        UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1];

        if(toOrientation == UIInterfaceOrientationLandscapeLeft ||
           toOrientation == UIInterfaceOrientationLandscapeRight) {                                     
            transView.frame = CGRectMake(0, 0, 480, 320 );
            tabBar.hidden = TRUE;
        }
        else
        {                               
            transView.frame = CGRectMake(0, 0, 320, 480);         
            tabBar.hidden = FALSE;
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM