iOS Rotation с UITabBarController - полностью и плавно отключите контроллер

У меня есть приложение для iOS, и основная точка входа в раскадровку - это панель вкладок с вкладками. Я хочу поддерживать вращение, но в ландшафтном режиме каждая вкладка будет выглядеть совершенно по-другому, так что мне нужно изменить представления с другими из раскадровки. Однако сначала я подумал о том, чтобы просто отключить весь контроллер панели вкладок при повороте пользователя, но я не понимаю, как это можно сделать. Итак, у меня есть два варианта, с которыми я, кажется, никуда не денусь.

  1. Переключайте каждый вид с переходом как-нибудь на его ландшафтный вариант и обратно. Я видел, как это легко делается с модальными представлениями, но не с UITabbar раньше.

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

У кого-нибудь есть что-то подобное, что они делают, и мог бы бросить мне кость?


person chrislhardin    schedule 20.03.2014    source источник


Ответы (1)


Вы можете создать собственный класс для обоих контроллеров представления, связать их вместе с помощью сегментов, а затем использовать didRotateFromInterfaceOrientation: для запуска сегментов из кода. Создайте класс для своих венчурных капиталистов. Добавьте этот код в файл .m:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||   fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    [self performSegueWithIdentifier:@"rotateToPortrait" sender:nil];
} else {
    [self performSegueWithIdentifier:@"rotateToLandscape" sender:nil];
}
}

И в раскадровке создайте переходы между двумя представлениями. Сделайте их идентификаторы rotateToPortrait и rotateToLandscape соответственно. Добавленный вами код будет переключать представления всякий раз, когда устройство поворачивается.

РЕДАКТИРОВАТЬ: Я думаю, что неправильно понял вопрос. Если вы хотите перемещать представления, изменять их размер и т. Д. При повороте экрана, сохраняя то же состояние навигации / панели вкладок, вы можете сделать что-то вроде этого в методе didRotateFromInterfaceOrientation:

if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||   fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    myView.frame.origin.x = aNumber;
    myView.frame.size.width = anotherNumber;
        // Changing the layout of the views here by resetting their origins and sizes.
        // This code is called when rotated from portrait to landscape.
} else {
        // Do the same thing as above, but this one handles rotation from landscape to portrait.
}
person eritbh    schedule 20.03.2014
comment
подождите ... Я не думаю, что это ответ на вопрос ... Можете ли вы переставить представления, используя метод, описанный выше? - person eritbh; 21.03.2014
comment
да, я тоже не уверен, что это отвечает на вопрос. Это действительно отличный ответ, но, поскольку вы находитесь в TabViewController в раскадровке, как выглядит переход segue? Как связать просмотры? - person chrislhardin; 21.03.2014
comment
Что ж, у перехода, я думаю, нет перехода, и он будет переключать представления по мере вращения. Вы бы связали представления с ручными переходами, которые автоматически запускаются настраиваемым классом. Я дополню свой ответ дополнительной информацией. - person eritbh; 22.03.2014