Лучший способ изменить UIViewController представление NIB программно - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть это приложение для iPad с различными NIB и представлениями. Каждое представление имеет два NIB, один для ориентации портрета и один для ландшафта, поэтому я ищу метод для программного переключения NIB для данного UIViewController.

Сейчас у меня есть эта функция, которую я использую в методе willRotateToInterfaceOrientation каждого контроллера:

void UIHandleRotation( UIViewController *controller, NSString *nibName, UIInterfaceOrientation orientation, BOOL transform ){
    double angle = 0.0;

    if( orientation == UIInterfaceOrientationPortrait ) {
        angle = PI * 2 /* 360° */;
    } 
    else if( orientation == UIInterfaceOrientationLandscapeLeft ){
        angle   = PI + PI/2 /* 270 ° */;
        // Each landscape nib is [nib-name]L
        nibName = [NSString stringWithFormat:@"%@L", nibName];
    }    

    [[NSBundle mainBundle] loadNibNamed:nibName owner:controller options:nil];
    if( transform ) {
        controller.view.transform = CGAffineTransformMakeRotation( angle );
    } 
}

Но это вызывает у меня странное поведение (пользовательский интерфейс контролирует положение, выходы не связаны, как в конструкторе интерфейсов и т. Д.).

Я делаю что-то не так или есть просто лучший способ реализовать это? Спасибо

ПРИМЕЧАНИЕ. Я не использую контроллер навигации, поэтому я не могу использовать это решение Самый простой способ поддержки нескольких ориентаций? Как загрузить пользовательский NIB, когда приложение находится в альбомной ориентации?

Ответы [ 4 ]

3 голосов
/ 01 декабря 2010

Вы должны использовать только один NIB с двумя видами: один для портрета (potraitView) с рамкой (0,0,768, 1024) и другой для ландшафта (landScapeView) с рамкой (0,0,1024, 768).И установите ваши элементы управления в обоих представлениях (potraitView и landScapeView) в соответствии с вашими требованиями.

, и после этого вы можете установить свои представления в соответствии с ориентацией устройства как -

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
landScapeView.hidden = YES;
portraitView.hidden = NO;

}

else{

landScapeView.hidden = NO;
portraitView.hidden = YES;

}
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
            interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

Привет,

Как я думаю, вы хотите знать, когда загружается представление, какова ориентация по умолчанию и как я могу загрузить представление в соответствии с этой ориентацией.Если этот вопрос такой же, как вы задаете, то ответы -

Когда вы запускаете свое приложение и загружается тот же класс, тогда - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) метод interfaceOrientation вызывается автоматически.Затем он возвращает ориентацию вашего устройства и устанавливает ваш вид в соответствии с этой ориентацией (используя тот же код, как описано выше).Я думаю, вам не нужно делать больше.

1 голос
/ 30 ноября 2010

Вы не должны переключать перья, вы должны переключать контроллеры.

См. Этот ответ для: Самый простой способ поддержки нескольких ориентаций

0 голосов
/ 01 декабря 2010

Почему вам нужно использовать 2 пера для одного и того же вида. Вы должны использовать один перо для разных ориентаций. Вы можете программно обрабатывать необходимые элементы управления одним и тем же методом

willRotateToInterfaceOrientation

Спасибо.

0 голосов
/ 30 ноября 2010

вам нужно иметь одно представление для каждого пера, поэтому ваш UIViewController будет иметь два UIViews.один для портрета и один для ландшафта.

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