Hoe draaien om landschap in een tabbalk app

stemmen
7

Ik heb een tabbalk gebaseerde applicatie.

Ik bouw 2 x bekeken, één in portret en een andere in landscape modus in de Interface Builder.

Nu, ik wil iets als de iPod App. Ik wil het landschap oog op volledig scherm, en verberg de tabbalk en de statusbalk.

Ik maak de basis van dit werk:

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

Maar werken allemaal rommelig. Het landschap uitzicht niet correct het gebied te vullen en de bedieningselementen bevinden zich in de verkeerde plaatsen, diferent als eerste desingned.

Ook heb ik nog steeds niet een manier gevonden om alles te verbergen ...

De vraag is gesteld op 10/02/2009 om 22:59
bron van user
In andere talen...                            


5 antwoorden

stemmen
5

Kijk naar Apple's "AlternateViews" sample code.

Het basisidee is dat je de fysieke oriëntatie van het apparaat met meldingen kan detecteren, en activeer een nieuwe visie controller "modaal" en hebben het verzoek het volledige scherm. U uitschakelen interface van rotatie door het hebben van shouldAutorotate ... terugkeren JA slechts voor één oriëntatie, omdat je dit allemaal handmatig doen met meldingen. Wanneer u de fysieke oriëntatie wijzigt, wordt uw modale view controller ofwel gepresenteerd of ontslagen.

antwoordde op 30/11/2009 om 01:47
bron van user

stemmen
1

Er lijken een behoorlijk aantal van de ontwikkelaars die willen een tabblad bar voorwerp mee te nemen naar een liggende stand volledig scherm (geen statusbalk, geen tab bar) en kom dan terug.

Ik heb een vraag over de vraag of dit inderdaad mogelijk is op de Apple developers forum gepost, maar nog geen antwoord gehad.

Waarom is dit moeilijk? (Sorry, een newbie vraag? Het lijkt erop dat een aantal nogal voor de hand liggende dingen niet moeilijk moeten zijn) Niemand heb ik nog online hebben gevonden heeft een duidelijk antwoord op.

antwoordde op 15/11/2009 om 02:21
bron van user

stemmen
1

Als ik kijk naar de iPod app, het lijkt mij dat de TabBarController uitzicht niet wordt vervangen of aangepast in any way. Ik denk dat er slechts een fade overgang tussen de tabBarController uitzicht en de coverflow uitzicht.

Als ik jou was, zou ik proberen (niet zeker of dit zou kunnen werken) met een CoverFlow controller, met uitzicht weergegeven op de top van het standpunt van de tabBarController's. Als zou de tabBarController verhinderen autorotating zijn standpunt, maar op dat moment zou ik fade-out zijn standpunt en fade in de CoverFlow visie, die landschap alleen zou zijn.

Ik weet niet of de statusbalk een correct gedrag zou hebben, en ik laat veel details voor u om uit te zoeken, maar in ieder geval ik denk dat het een leuk idee om twee afzonderlijke controllers te hebben, één toonde in landschap, de andere (de tabbalk) staand.

Hoop dat u zal helpen.

antwoordde op 14/11/2009 om 10:24
bron van user

stemmen
1

Ok, dit is voor zover ik dit aan het werk:

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

Nu, in de 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];  
}

Maar hoe stel de huidige inzichten en uitgaande hoe het herstel van de tabbalk?

antwoordde op 11/02/2009 om 21:23
bron van user

stemmen
1

U kunt de statusbalk te verbergen door te bellen naar

setStatusBarHidden:(BOOL)

een UiApplication referentie, zoals zo.

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

[application setStatusBarHidden:YES];

}

Om zich te ontdoen van de tabbalk kunt u een verwijzing outlet in Interface Builder te brengen in uw code en call

[myUITabBar removeFromSuperview];

Dat zou kunnen werken, hoewel ik het niet heb getest, net als voor de andere vragen, ik ben niet 100%, na de problemen niet eerder aangepakt.

antwoordde op 11/02/2009 om 13:20
bron van user

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