Hvordan rotere visningen til liggende i en fanelinja app

stemmer
7

Jeg har en fanelinja basert app.

Jeg bygger 2 visninger, en i stående og en annen i liggende modus i Interface Builder.

Nå ønsker jeg noe som iPod App. Jeg vil landskapet sikte på å være fullscreen, og skjule fanelinja og statuslinjen.

Jeg gjør for å jobbe den grunnleggende på dette:

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

Men alt virker rotete. Den liggende visning ikke riktig fylle området og kontrollene er plassert i feil steder, Diferent som desingned først.

Også, jeg fortsatt ikke funnet en måte å skjule alt annet ...

Publisert på 10/02/2009 klokken 21:59
kilden bruker
På andre språk...                            


5 svar

stemmer
5

Se på Apples "AlternateViews" eksempelkode.

Den grunnleggende ideen er at du kan oppdage den fysiske orientering av enheten med meldinger, og deretter aktivere en ny visning controller "modally" og har det be om full skjerm. Du deaktivere grensesnitt rotasjon ved å ha shouldAutorotate ... tilbake JA bare for en orientering, siden du gjør alt dette manuelt med meldinger. Når du endrer den fysiske orientering, er din modal visningen kontrolleren enten presenteres eller avvist.

Svarte 30/11/2009 kl. 00:47
kilden bruker

stemmer
2

Du kan skjule statuslinjen ved å ringe

setStatusBarHidden:(BOOL)

på en UIApplication referanse, som så.

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

[application setStatusBarHidden:YES];

}

Å kvitte seg med fanelinja kan du lage en henvisning uttak i Interface Builder til din kode og samtale

[myUITabBar removeFromSuperview];

Det kan fungere, selv om jeg ikke har testet det, som for de andre spørsmålene, jeg er ikke 100%, har ikke taklet problemene før.

Svarte 11/02/2009 kl. 12:20
kilden bruker

stemmer
1

Det synes å være et ganske stort antall programmerere som ønsker å ha en fanelinjen element ta dem til en liggende visning i full skjerm (ingen statuslinjen, ingen fanelinjen) og deretter komme tilbake.

Jeg har lagt ut en forespørsel om hvorvidt dette er faktisk mulig på Apple utviklere forum, men har ennå ikke hatt et svar.

Hvorfor er dette vanskelig? (Sorry, en nybegynner spørsmålet? Det virker som noen heller åpenbare ting bør ikke være vanskelig) Ingen jeg har funnet ennå på nettet har et klart svar på dette.

Svarte 15/11/2009 kl. 01:21
kilden bruker

stemmer
1

Når jeg ser på iPod-programmet, synes det for meg at TabBarController visningen ikke erstattes eller endres på noen måte. Jeg tror det er bare en fade overgang mellom tabbarcontroller visning og coverflow utsikt.

Hvis jeg var deg, ville jeg prøve (ikke sikker på om dette kan fungere) med en coverflow-kontroller, med sin utsikt vises på toppen av tabBarController syn. Hvis ville hindre tabBarController fra autorotating sitt syn, men i det øyeblikket ville jeg fade ut sitt syn og visne i Coverflow-visning, noe som ville være bare landskapet.

Jeg vet ikke om status ville ha en korrekt oppførsel, og jeg la en rekke detaljer for deg å sortere ut, men i alle fall tror jeg det ville være en fin idé å ha to separate kontrollere, viste i landskapet, den andre (fanelinja) i stående.

Håper at vil hjelpe deg.

Svarte 14/11/2009 kl. 09:24
kilden bruker

stemmer
1

Ok, dette er så langt jeg sette dette arbeidet:

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

Nå, i 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];  
}

Men hvordan stiller gjeldende visning og hvordan gjenopprette fanelinja?

Svarte 11/02/2009 kl. 20:23
kilden bruker

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