Переключить вид в XIB в зависимости от ориентации - PullRequest
0 голосов
/ 06 мая 2011

У меня есть два вида внутри моей XIB для каждой ориентации.Они похожи, но разные, поэтому я не могу полагаться на авторазмер.Я хочу переключить эти представления в зависимости от ориентации.Когда я использую метод didRotateFromInterfaceOrientation, то, когда он поворачивается из Portrait, он отображает альбомную ориентацию, это проблема, когда он поворачивается к PortraitUpsideDown.
И если я изменяю код для willRotateToInterfaceOrientation, тогда PortraitView скрывается от LandscapeView.пользователь, но когда пользователь нажимает кнопки, они не отображаются серым цветом, чтобы показать, что они были нажаты, и приложение реагирует так, как будто пользователь нажимает кнопки, которые находятся в портретном представлении.

Я собираюсь сделать этопроблема в правильном порядке?Что мне нужно сделать, чтобы исправить эти ошибки.Я бы предпочел использовать метод willRotateToInterfaceOrientation.

Спасибо,

КОД:

- (void)viewDidLoad {
... 
    for (UIView *v in self.view.subviews) {
        v.autoresizingMask = UIViewAutoresizingNone;
    }
...
}

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

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {

    if(fromInterfaceOrientation == UIInterfaceOrientationPortrait 
       || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        //Add landscape view
        if(![landscapeView superview]){
            for (UIView *v in landscapeView.subviews) {
                v.autoresizingMask = UIViewAutoresizingNone;
            }
            //No effect after testing
            [UIView beginAnimations:nil context:nil];
            [UIView setAnimationDuration:0.33];
            [self.view addSubview:landscapeView];
            [UIView commitAnimations];
        }
    }else {
        if([landscapeView superview]){
            [landscapeView removeFromSuperview];
        }
    }
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft 
       || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        //Add landscape view
        if(![landscapeView superview]){
            for (UIView *v in landscapeView.subviews) {
                v.autoresizingMask = UIViewAutoresizingNone;
            }
            //No effect after testing
            [UIView beginAnimations:nil context:nil];
            [UIView setAnimationDuration:0.33];
            [self.view addSubview:landscapeView];
            [UIView commitAnimations];
        }
    }else {
        if([landscapeView superview]){
            [landscapeView removeFromSuperview];
        }
}
}

1 Ответ

0 голосов
/ 07 августа 2011

По вашему мнению, загружен

[[NSNotificationCenter defaultCenter] addObserver:self
           selector:@selector(willRotateToInterfaceOrientation:)
           name:@"UIDeviceOrientationDidChangeNotification" object:nil];
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) {
        viewControllerName *newView = [[viewControllerName alloc] initWithNibName:nil bundle:nil];
        newView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:newView animated:YES];
        [newView release];

    }

    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) {
        viewControllerName *newView = [[viewControllerName alloc] initWithNibName:nil bundle:nil];
        newView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:newView animated:YES];
        [newView release];

    }

    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) {
        viewControllerName *newView = [[viewControllerName alloc] initWithNibName:nil bundle:nil];
        newView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:newView animated:YES];
        [newView release];

    }

    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) {
        viewControllerName *newView = [[viewControllerName alloc] initWithNibName:nil bundle:nil];
        newView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:newView animated:YES];
        [newView release];

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...