Как вращать вид на пейзаж в приложении TabBar

голоса
7

У меня есть приложение на основе TabBar.

Я строй 2 просмотров, один в портрете, а другой в ландшафтном режиме в Interface Builder.

Теперь, я хочу что-то вроде IPod App. Я хочу вид ландшафта, чтобы быть на весь экран, и скрыть TabBar & строку состояния.

Я делаю работу основных из этого:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration { 
    if (self.landscape) {
        if (toInterfaceOrientation == UIInterfaceOrientationPortrait)
        {
            self.view = self.portrait;
            self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(360));
        }
        else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        {
            self.view = self.landscape;
            self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
        }
        else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
        {
            self.view = self.landscape;
            self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
        }
        else
        {
            self.view = self.portrait;
            self.view.transform =  CGAffineTransformMakeRotation(degreesToRadian(-180));
        }
    }
}

Но все работают неаккуратно. Вид ландшафта не правильно заполнить область и элементы управления расположены в неправильных местах, Diferent, как desingned первым.

Кроме того, я до сих пор не нашел способ, чтобы скрыть все остальное ...

Задан 10/02/2009 в 22:59
источник пользователем
На других языках...                            


5 ответов

голоса
5

Посмотрите на «AlternateViews» образец кода Apple.

Основная идея заключается в том, что вы можете обнаружить физическую ориентацию устройства с уведомлениями, а затем активировать новый контроллер представления «модален» и это запросить полный экран. Вы отключить поворот интерфейса при наличии shouldAutorotate ... вернуться ДА только для одной ориентации, так как вы делаете все это вручную с помощью уведомлений. При изменении физической ориентации, ваш модальный контроллер представления либо представлен или отклонен.

Ответил 30/11/2009 в 01:47
источник пользователем

голоса
1

Там, кажется, довольно много кодеров, которые хотят иметь панель вкладок пункт не принимать их на виде пейзажа полного экрана (нет строки состояния, нет панели вкладок), а затем вернуться.

Я отправил запрос, является ли это действительно возможно на форуме разработчиков компании Apple, но еще не получил ответа.

Почему это трудно? (Извините, новичок вопрос? Похоже, что некоторые довольно очевидные вещи, не должны быть трудно) Никто, я нашел еще онлайн не имеет четкий ответ на этот вопрос.

Ответил 15/11/2009 в 02:21
источник пользователем

голоса
1

Когда я смотрю на приложение IPod, то мне кажется, что вид TabBarController не заменяется или изменены каким-либо образом. Я думаю, что это просто переход замирания между представлением tabbarcontroller и видом Coverflow.

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

Я не знаю, если STATUSBAR будет иметь правильное поведение, и я позволяю много деталей для вас, чтобы разобраться, но в любом случае я думаю, что это будет хорошая идея, чтобы иметь два отдельных контроллеров, один показал в пейзаже, другой (TabBar) в портретном.

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

Ответил 14/11/2009 в 10:24
источник пользователем

голоса
1

Хорошо, это, насколько я ставлю это на работу:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration {
    if (self.landscape) {
        if (toInterfaceOrientation == UIInterfaceOrientationPortrait)
        {
            self.view = self.portrait;
            //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(360));
        }
        else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        {
            self.view = self.landscape;
            //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
        }
        else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
        {
            self.view = self.landscape;
            //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
        }
        else
        {
            self.view = self.portrait;
            //self.view.transform =  CGAffineTransformMakeRotation(degreesToRadian(-180));
        }
    }
}

Теперь, в AppDelegate:

- (void) didRotate:(NSNotification *)notification
{   
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    [UIView beginAnimations:nil context:NULL];  

    if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)
    {
        [tabBarController.view setAlpha:0.0];
        [tabBarController.view removeFromSuperview];

        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; 
    } else {
        [tabBarController.view setAlpha:1.0];
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];      
    }
    [UIView commitAnimations];  
}

Но тогда, как установить текущее представление и как восстановить TabBar?

Ответил 11/02/2009 в 21:23
источник пользователем

голоса
1

Вы можете скрыть строку состояния, вызвав

setStatusBarHidden:(BOOL)

на ссылке UIApplication, например, так.

- (void)applicationDidFinishLaunching:(UIApplication *)application {

[application setStatusBarHidden:YES];

}

Для того, чтобы избавиться от TabBar вы можете сделать выход реферирования в строителе интерфейса к коду и вызову

[myUITabBar removeFromSuperview];

Это может сработать, хотя я не проверял, как и для других вопросов, я не 100%, то, не решать проблемы раньше.

Ответил 11/02/2009 в 13:20
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more