首页 文章

iOS - 横向模式下的UIView不旋转

提问于
浏览
0

我正在为iPhone和iPad编写应用程序支持 . 在iPhone中需要使用Portrait模式,iPad需要使用Landscape .

AppDelegate.m

if ([CKAppDelegate isPad]) {
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];

    CGSize size = [self getScreenSize];
    navigationController = [[UINavigationController alloc] initWithRootViewController:[[PadMainViewController alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]];
} else {
    CGSize size = [self getScreenSize];
    navigationController = [[UINavigationController alloc] initWithRootViewController:[[MainViewController alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]];
}

self.window.rootViewController = navigationController;

...

- (CGSize)getScreenSize
{
    CGSize size;
    if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) && [[UIScreen mainScreen] bounds].size.height > [[UIScreen mainScreen] bounds].size.width) {
        // in Landscape mode, width always higher than height
        size.width = [[UIScreen mainScreen] bounds].size.height;
        size.height = [[UIScreen mainScreen] bounds].size.width;
    } else if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) && [[UIScreen mainScreen] bounds].size.height < [[UIScreen mainScreen] bounds].size.width) {
        // in Portrait mode, height always higher than width
        size.width = [[UIScreen mainScreen] bounds].size.height;
        size.height = [[UIScreen mainScreen] bounds].size.width;
    } else {
        // otherwise it is normal
        size.height = [[UIScreen mainScreen] bounds].size.height;
        size.width = [[UIScreen mainScreen] bounds].size.width;
    }
    return size;
}

PadMainViewController.m

- (id)initWithFrame:(CGRect)frame
{
    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width * 0.7, frame.size.height)];
    leftView.backgroundColor = [UIColor cyanColor];

    UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width * 0.3, frame.size.height)];
    rightView.backgroundColor = [UIColor yellowColor];

    self.chopInkButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [self.chopInkButton setTitle:@"Tap to ChopInk" forState:UIControlStateNormal];
    self.chopInkButton.frame = CGRectMake(50, 200, 250, 44);
    [self.chopInkButton addTarget:self action:@selector(chopInkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [rightView addSubview:self.chopInkButton];

    self.logoImageView.frame = CGRectMake(50, 50, 100, 100);
    [self.logoImageView.layer setBorderColor:[[UIColor blackColor] CGColor]];
    [self.logoImageView.layer setBorderWidth:2.0f];
    [rightView addSubview:self.logoImageView];

    [self.view addSubview:leftView];
    [self.view addSubview:rightView];
    return self;
}
...
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation
{
    return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation));
}

我得到的结果是

Wierd result

在项目摘要中,我已经禁用了iPad的纵向模式

enter image description here

知道为什么按钮不旋转?

2 回答

  • 0

    尝试使用以下方法:适用于iOS 6

    - (NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskAll;
    }
    
    - (BOOL)shouldAutorotate 
    {
       return YES;
    }
    
  • 0

    我通过改变来解决这个问题

    PadMainViewController.m

    - (id)initWithFrame:(CGRect)frame
    {
        ...
        return self;
    }
    

    - (id)initWithFrame:(CGRect)frame
    {
        if ((self = [super init])) {
            ...
        }
        return self;
    }
    

    顺便说一句, initWithFrame 是自定义函数 .

相关问题