Come ruotare al fine di paesaggio in un'applicazione TabBar

voti
7

Ho un'applicazione basata TabBar.

Costruisco 2 viste, uno in verticale e l'altro in modalità orizzontale in Interface Builder.

Ora, voglio qualcosa come l'iPod App. Voglio la vista del paesaggio per essere a schermo intero, e nascondere la barra delle linguette e la barra di stato.

Faccio a lavorare la base di questo:

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

Ma tutto il lavoro disordinato. Il punto di vista del paesaggio non riempire correttamente la zona ed i comandi si trovano in posizioni sbagliate, come Diferent desingned prima.

Inoltre, non ho ancora trovato un modo per nascondere tutto il resto ...

È pubblicato 10/02/2009 alle 22:59
fonte dall'utente
In altre lingue...                            


5 risposte

voti
5

Guardate il codice di esempio di Apple "AlternateViews".

L'idea di base è che si può rilevare l'orientamento fisico del dispositivo con le notifiche, e quindi attivare un nuovo controller di vista "modale" e lo hanno richiedere l'intero schermo. Si disattiva la rotazione dell'interfaccia avendo shouldAutorotate ... tornare SI per un solo orientamento, dal momento che si sta facendo tutto ciò manualmente con le notifiche. Quando si modifica l'orientamento fisico, il controller di vista modale si sia presentata o respinto.

Risposto il 30/11/2009 a 01:47
fonte dall'utente

voti
1

Sembra che ci siano un discreto numero di programmatori che vogliono avere una voce di scheda barra di portarli ad una schermata piena vista del paesaggio (nessuna barra di stato, nessuna scheda bar) e poi tornare.

Ho pubblicato un'inchiesta sul fatto che questo è davvero possibile sul forum sviluppatori di Apple, ma non ho ancora avuto una risposta.

Perchè è così difficile? (Scusate, una domanda newbie? Sembra che alcune cose piuttosto ovvie non dovrebbe essere difficile) Nessuno che ho trovato ancora in linea ha una risposta chiara a questa.

Risposto il 15/11/2009 a 02:21
fonte dall'utente

voti
1

Quando guardo l'iPod app, mi sembra che la vista TabBarController non viene sostituito o modificato in alcun modo. Penso che ci sia solo una transizione di dissolvenza tra la vista e la vista tabbarcontroller Coverflow.

Se fossi in te, vorrei provare (non so se questo potrebbe funzionare) con un controller coverflow, con la sua vista visualizzata sulla parte superiore di vista del tabBarController. Se impedirebbe l'tabBarController da autorotating suo punto di vista, ma in quel momento mi sarebbe fade out suo punto di vista e fade nella vista Coverflow, che sarebbe solo paesaggio.

Non so se nella barra di stato avrebbe avuto un comportamento corretto, e ho lasciato un sacco di dettagli per voi per risolvere, ma in ogni caso penso che sarebbe una bella idea avere due controller separati, uno ha mostrato nel paesaggio, l'altro (la barra delle linguette) in verticale.

Spero che vi aiuterà.

Risposto il 14/11/2009 a 10:24
fonte dall'utente

voti
1

Ok, questo è quanto ho messo questo al lavoro:

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

Ora, nella 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];  
}

Ma allora come impostare la vista corrente e come ripristinare la barra delle linguette?

Risposto il 11/02/2009 a 21:23
fonte dall'utente

voti
1

È possibile nascondere la barra di stato chiamando

setStatusBarHidden:(BOOL)

su un riferimento UIApplication, in questo modo.

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

[application setStatusBarHidden:YES];

}

Per sbarazzarsi di barra delle linguette si può fare una presa di riferimento in Interface Builder per il codice e chiamata

[myUITabBar removeFromSuperview];

Che potrebbe funzionare, anche se non ho provato, come per le altre domande, io non sono al 100%, non avendo affrontato i problemi prima.

Risposto il 11/02/2009 a 13:20
fonte dall'utente

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