iPhone: приложение только с альбомным и только портретным режимами просмотра

Я создаю приложение с несколькими UIViewController, управляемыми RootViewController. В настоящее время в списке для приложения по умолчанию используется LandscapeRight.

Допустим, у меня есть следующие файлы, которые можно загрузить в RootViewController:

  1. IntroView (ТОЛЬКО в альбомной ориентации справа)
  2. Пейзаж (ТОЛЬКО Пейзаж справа)
  3. PortraitView (ТОЛЬКО портретная ориентация)

Я также добавил в shouldAutorotateToInterfaceOrientation RootViewController следующее:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if ([currentClass class] == PortraitView.class) {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);

} else {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

}

так что все в порядке, пока я не загрузлю PortraitView, а в viewWillAppear я добавлю следующее (аналогично эта ветка

if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { //UIInterfaceOrientationLandscapeRight) {      

    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
    self.view.bounds = CGRectMake(0.0, 0.0, 320, 480);
    self.view.center = CGPointMake(240.0f, 160.0f);

}


[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

Это приводит к правильной загрузке в PortraitView, но теперь моя проблема в том, что в моем PortraitView у меня есть 2 подпредставления, между которыми я хотел бы переключаться, но поскольку я повернул свое представление, UIViewAnimationTransitionFlipFromLeft фактически заставляет его переворачиваться сверху вниз, а не слева направо. Я не могу понять, как сказать PortraitView, что он находится в портрете.

Когда я проверяю [[UIDevice currentDevice] ориентацию]; он говорит мне, что это в пейзаже. Когда я пытаюсь использовать shouldAutorotateToInterfaceOrientation и устанавливаю только портрет, он затем поворачивает мой вид, поэтому он больше не является правильным.

Надеюсь, это имеет смысл! Целый день занимаюсь этим вопросом.

Спасибо!


person Anthony 'Ants' Nguyen    schedule 18.11.2010    source источник
comment
Что такое суперкласс RootViewController? Это просто UIViewController?   -  person David Liu    schedule 19.11.2010
comment
Да просто UIViewController. Я не использую ни навигацию, ни панели вкладок.   -  person Anthony 'Ants' Nguyen    schedule 19.11.2010


Ответы (1)


Я столкнулся с этим несколько иначе; подкласс UIViewController в ландшафтном режиме, который менял местами сверху вниз, а не слева направо.

Исправление, которое сработало для меня, заключалось в том, чтобы добавить все мои представления к одному «внутреннему» представлению, а затем перевернуть его вместо обычного UIViewController view.

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                           forView:[self innerView]
                             cache:YES];

Где [self innerView] - единственный дочерний элемент [self view], и все подпредставления находятся внутри него.

person Fiona Hopkins    schedule 30.03.2011