Comment Faire pivoter la vue de paysage dans une application TabBar

voix
7

J'ai une application basée TabBar.

Je construis 2 vues, un en portrait et un autre en mode paysage dans l'Interface Builder.

Maintenant, je veux quelque chose comme l'application iPod. Je veux la vue du paysage pour être en plein écran, et masquer la barre d'onglets et la barre d'état.

Je fais travailler la base de celle-ci:

- (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));
        }
    }
}

Mais le travail tout en désordre. La vue du paysage remplit pas correctement la zone et les contrôles sont situés dans des endroits mal, diferent comme desingned premier.

De plus, je toujours pas trouvé un moyen de cacher tout le reste ...

Créé 10/02/2009 à 22:59
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
5

Regardez l'exemple de code « AlternateViews » d'Apple.

L'idée de base est que vous pouvez détecter l'orientation physique de l'appareil avec des notifications, puis activer un nouveau contrôleur de vue « modalement » et ont demander au plein écran. Vous désactiver la rotation de l'interface en ayant shouldAutorotate ... retour OUI pour une seule orientation, puisque vous faites tout manuellement avec des notifications. Lorsque vous modifiez l'orientation physique, votre contrôleur modal de vue est soit présentée ou rejetée.

Créé 30/11/2009 à 01:47
source utilisateur

voix
1

Il semble y avoir un bon nombre de codeurs qui veulent avoir un onglet barre élément les prendre à une vue plein écran paysage (pas la barre d'état, pas de barre d'onglets), puis revenir.

J'ai posté une enquête pour savoir si cela est en effet possible sur le forum des développeurs Apple, mais pas encore eu de réponse.

Pourquoi est-ce difficile? (Désolé, une question de débutant? Il semble que certaines choses assez évidentes ne devrait pas être difficile) Personne que j'ai trouvé en ligne n'a pas encore une réponse claire à ce sujet.

Créé 15/11/2009 à 02:21
source utilisateur

voix
1

Quand je regarde l'application iPod, il me semble que la vue TabBarController n'est pas remplacé ou modifié de quelque façon. Je pense qu'il est juste une transition de fondu entre la vue tabbarcontroller et la vue CoverFlow.

Si je devais vous, je voudrais essayer (pas sûr si cela pourrait fonctionner) avec un contrôleur CoverFlow, avec vue affichée sur le dessus de la vue du tabBarController. Si empêcherait la tabBarController de autorotation son point de vue, mais à ce moment, je disparaître son point de vue et se fanent dans la vue CoverFlow, qui serait seul paysage.

Je ne sais pas si le statusBar aurait un comportement correct, et je laisse beaucoup de détails pour vous de trier, mais en tout cas, je pense que ce serait une bonne idée d'avoir deux contrôleurs séparés, on a montré dans le paysage, l'autre (le tabBar) en portrait.

Espoir qui vous aidera.

Créé 14/11/2009 à 10:24
source utilisateur

voix
1

Ok, cela est aussi loin que je mets au travail ce:

- (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));
        }
    }
}

Maintenant, dans le 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];  
}

Mais alors comment définir la vue actuelle et comment restaurer la barre d'onglets?

Créé 11/02/2009 à 21:23
source utilisateur

voix
1

Vous pouvez masquer la barre d'état en appelant

setStatusBarHidden:(BOOL)

sur une référence UIApplication, comme si.

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

[application setStatusBarHidden:YES];

}

Pour se débarrasser de la barre d'onglets, vous pouvez faire une prise de référencement dans Interface Builder à votre code et appel

[myUITabBar removeFromSuperview];

Cela pourrait fonctionner, même si je ne l'ai pas testé, comme pour les autres questions, je ne suis pas à 100%, n'ayant pas abordé les problèmes avant.

Créé 11/02/2009 à 13:20
source utilisateur

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