Как устранить предупреждение о «двухступенчатом вращении»? - PullRequest
11 голосов
/ 09 июля 2011

rootViewController моего окна является UINavigationController Затем .. В rootViewController этого контроллера навигации я выскакиваю модальное представление (UITabBarController)

как то так:

UIWindow
->UINavigationController
-->MyFirstViewController<--In this class I run following code
[self.navigationController presentModalViewController:tabController animated:YES];

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

Однако, если модальное представление не является tabController, это предупреждение не появляется.

Что такое поведение повредит приложению, когда я выскакиваю модальное представление tabController в контроллере навигации?

Или я должен найти другой способ сделать это?

Я нашел несколько похожих вопросов на этом сайте, но я не понимаю ...

Ответы [ 7 ]

14 голосов
/ 10 июля 2011

Причина в том, что вы используете UITabBarController за пределами предполагаемого использования.Он предназначен ТОЛЬКО для использования в качестве корневого контроллера, и если вам нужно что-то похожее на панель инструментов использования панели вкладок.У меня были проблемы с точной проблемой около полугода назад.К сожалению, вы также столкнетесь с другими проблемами, если будете так использовать.

Документация UITabBarController

Поскольку класс UITabBarController наследуется от класса UIViewController, контроллеры панели вкладок имеют свое собственное представление, доступное через свойство view.При развертывании интерфейса панели вкладок вы должны установить это представление как корневой каталог вашего окна.В отличие от других контроллеров представления, интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.

12 голосов
/ 27 января 2013

Я получил то же предупреждение при создании подкласса UITabBarController, но забыл вызвать базовый класс viewWillAppear: метод в своем собственном классе.

- (void) viewWillAppear:(BOOL)animated {

  [super viewWillAppear:animated]    // <--- adding this fixed the warning

  ...

}
12 голосов
/ 10 декабря 2012

Это также произойдет, если вы добавите только пустой UITabbarController без каких-либо дочерних контроллеров, например:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    //Tab bar controller
    UITabBarController* tabBarController = [[UITabBarController alloc] init];    
    [[self window] setRootViewController:tabBarController];

    [self.window makeKeyAndVisible];
    return YES;
}

Предупреждение исчезнет, ​​если вы добавите дочерний контроллер представления в UITabBarController перед объявлением егоrootViewController вашего UIWindow.

2 голосов
/ 23 сентября 2012

У меня есть приложение, где UITabBarController - контроллер корневого представления. В зависимости от покупки в приложении контроллеры дочернего представления могут быть разными.

В моем NIB у меня был UITabBarController без каких-либо дочерних контроллеров представления. Я добавил дочерние контроллеры вида в application:didFinishLaunchingWithOptions:

Это привело к появлению предупреждения «двухступенчатое» вращение. Как только я добавил один дочерний контроллер представления в контроллер панели вкладок в NIB, он исчез.

0 голосов
/ 14 марта 2014

Возникла проблема с предупреждением о двухэтапной анимации в следующем порядке:

self.window.rootViewController = self.tabBarController;
self.tabBarController.selectedIndex = 0;

Но изменение порядка поможет мне устранить предупреждение.

self.tabBarController.selectedIndex = 0;
self.window.rootViewController = self.tabBarController;

Надеюсь, это поможет.

0 голосов
/ 08 января 2014

Ответ Оливера сделал свое дело для меня ... это было интересно, хотя ... у меня не было никаких проблем, пока я не добавил viewWillAppear: анимированный метод в субклассированный контроллер tabview ... в этот момент все пошлоhaywire, пока это не было исправлено добавлением оператора [super viewWillAppear: animated] Оливер предлагает ...

0 голосов
/ 24 февраля 2013

@ Maciej Swic ответ мне немного помог.

В моем случае у меня уже было 2 дочерних элемента для UITabBarController.

По какой-то странной причине все, что мне нужно, это поставить

[self.window makeKeyAndVisible];

после того, как я добавил 2 детей.

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