2013-05-20 1 views
4

У меня есть два контроллера вида, A и B. A предназначен для поддержки только портрета, тогда как B может поддерживать пейзаж. Я показываю B, используя сдерживание api.вращение и сдерживание api

[self addChildViewController:child]; 
[self.view addSubview:child.view]; 
child.view.frame = self.view.bounds; 
[child didMoveToParentViewController:self]; 

Я реализовал

- (BOOL)shouldAutorotate 
{ 
    UIViewController *current = _presentingChild ? _child : self; 
    return [current shouldAutorotate]; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    UIViewController *current = _presentingChild ? _child : self; 
    return [current supportedInterfaceOrientations]; 
} 

все работает как шарм. Если устройства являются ландшафтными, а A и I представляют B, вращение немедленно поворачивается.

проблема возникает, когда я увольняюсь B. Если на устройстве есть пейзаж A, отображается пейзаж (и этого не должно быть).

Есть ли у вас предложение решить эту проблему? Я знаю, что могу использовать модальный контроллер, и это решит проблему. Но я не хочу использовать modal vc для этой конкретной ситуации.

ответ

1

Если я правильно понимаю, методы и supportedInterfaceOrientations находятся внутри A viewcontroller, который содержит контрольный контроллер B.

Если я прав, то, как вы реализовали эти два метода, является плохим: когда текущий контроллер представления является self (если условие _представляя условие Сложности ложно), вы должны иметь бесконечную рекурсию, потому что, например, shouldAutorotate будет вызван рекурсивно без окончания (вы возвращаете [self shouldAutorotate]).

Так что, если вы не испытываете бесконечную рекурсию, есть только две возможности:

  • два метода никогда не называются
  • условие _presentingChild всегда верно

Проверить и пусть я знаю

 Смежные вопросы

  • Нет связанных вопросов^_^