iOS 开发 - 让 UITabContorller 不同的tab 分别支持不同的横竖屏样式

来源:互联网 发布:便知天下事 编辑:程序博客网 时间:2024/06/06 17:19

直接上代码

在 UITabBarViewController.m 中

#import "ZZTabBarViewController.h"

#import "LeftTabViewController.h"

#import "RightTabViewController.h"


@interface ZZTabBarViewController ()


@end


@implementation ZZTabBarViewController


// 屏幕旋转

- (BOOL)shouldAutorotate {

    returnYES;

}


// 根据selectedIndex 确定支持的屏幕方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {

    if (self.selectedIndex ==0) {

// tab 0 // 所有屏幕方向

        returnUIInterfaceOrientationMaskAll;

    } else {

// 只支持竖屏

        returnUIInterfaceOrientationMaskPortrait;

    }

}


// viewDidLoad 中创建 tabBar 两个子视图控制器

- (void)viewDidLoad {

    [superviewDidLoad];

    self.tabBar.barTintColor = [UIColorblackColor];

    self.tabBar.tintColor = [UIColorwhiteColor];


    LeftTabViewController *left = [[LeftTabViewControlleralloc]init];

    left.tabBarItem.title =@"左视图";

    

    RightTabViewController *right = [[RightTabViewControlleralloc]init];

    right.tabBarItem.title =@"右视图";

    

    self.viewControllers =@[left, right];

}


// 重载 selectedViewController 的 setter, 目的是 当由 tab 0 到 tab 1 时, 若设备是横屏的, 则转为竖屏

- (void)setSelectedViewController:(__kindofUIViewController *)selectedViewController {

    [supersetSelectedViewController:selectedViewController];    

    UIDeviceOrientation orientation = [UIDevicecurrentDevice].orientation;

    if (self.selectedIndex ==1 &&UIDeviceOrientationIsLandscape(orientation)) {

        // 由于属性 orientation是只读的,所以采用以下方法实现

        if ([[UIDevicecurrentDevice]respondsToSelector:@selector(setOrientation:)]) {

            SEL selector =NSSelectorFromString(@"setOrientation:");

            NSInvocation *invocation = [NSInvocationinvocationWithMethodSignature:[UIDeviceinstanceMethodSignatureForSelector:selector]];

            [invocation setSelector:selector];

            [invocation setTarget:[UIDevicecurrentDevice]];

            int val =UIInterfaceOrientationPortrait;

            [invocation setArgument:&valatIndex:2];

            [invocation invoke];

        }

    }

}

0 0
原创粉丝点击