Подтвердить что ты не робот

Как устранить предупреждение "двухступенчатое вращение"?

Мое окно rootViewController - это UINavigationController Затем.. В этом навигационном контроллере rootViewController я вывожу модальный вид (UITabBarController)

что-то вроде этого:

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

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

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

Каким образом это поведение наносит вред приложению, когда я всплываю в модуле просмотра в режиме навигации ControlController?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Это также произойдет, если вы добавите пустой 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.

Ответ 3

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

- (void) viewWillAppear:(BOOL)animated {

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

  ...

}

Ответ 4

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

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

Это вызвало предупреждение о "двухступенчатом" вращении. Как только я добавил один контроллер дочернего представления в контроллер панели управления в NIB, он исчез.

Ответ 5

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

В моем случае у меня уже было 2 ребенка для UITabBarController.

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

[self.window makeKeyAndVisible];

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

Ответ 6

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

Ответ 7

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

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

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

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

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