Jak otočit pohled na krajinu v tabbar app

hlasů
7

Mám aplikace založené tabbar.

Stavím 2 pohledy, jeden v portrétu a další v krajině režim v Builder Interface.

Teď chci něco jako iPod App. Chci pohled krajiny bude fullscreen, a skrýt tabbar & stavovou lištu.

Dělám práci základům toto:

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

Ale to všechno fungovat chaotický. Pohled na šířku není správně vyplnit prostor a ovládací prvky jsou umístěny v nesprávných místech, diferent jako desingned jako první.

Také jsem ještě nenašel způsob, jak skrýt vše ostatní ...

Položena 10/02/2009 v 22:59
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
5

Podívejte se na „AlternateViews“ ukázkový kód Apple.

Základní myšlenkou je, že můžete odhalit fyzickou orientaci zařízení s oznámeními a aktivovat nový řadič pohled „modální“ a nechte jej požádat o celou obrazovku. Zakázání otáčení rozhraní tím, že shouldAutorotate ... vrátit YES pouze jedním směrem, protože děláte to všechno ručně s oznámeními. Změníte-li fyzickou orientaci, vaše modální názor Regulátor je buďto vyjádřeny nebo zamítnuta.

Odpovězeno 30/11/2009 v 01:47
zdroj uživatelem

hlasů
1

Zdá se, že značný počet kodérů, kteří chtějí mít položku liště vzít do krajiny pohled plném rozsahu (bez stavový řádek, žádná karta bar) a pak se vrátit.

Jsem vyslán dotaz o tom, zda je to opravdu možné na Fórum vývojářů Apple, ale dosud neměl odpověď.

Proč je tak těžké? (Sorry, nováček otázka? Vypadá to, že někteří spíše zřejmé, co by nemělo být těžké) Nikdo Zjistil jsem, že ještě on-line má jasnou odpověď na tuto otázku.

Odpovězeno 15/11/2009 v 02:21
zdroj uživatelem

hlasů
1

Když se podívám na aplikaci iPod, zdá se mi, že názor TabBarController není nahrazena nebo změněna v žádném případě. Myslím, že je jen fade přechod mezi zobrazením tabbarcontroller a pohledu coverflow.

Kdybych byl tebou, tak bych zkusit (nejsem si jistý, jestli by to mohlo fungovat) s řadičem coverflow, s jeho pohled zobrazí v horní části tabBarController pohledu. Pokud by se zabránilo tabBarController z autorotating svůj názor, ale v té chvíli bych zatmívání svůj názor a fade v coverflow pohledu, což by bylo pouze na šířku.

Já nevím, jestli stavové bude mít správné chování, a nechal jsem mnoho detailů pro vás vyřešit, ale v každém případě si myslím, že by bylo dobrý nápad mít dva samostatné ovladače, jeden ukázal v krajině, druhé (dále jen tabbar) na výšku.

Doufáme, že vám pomůže.

Odpovězeno 14/11/2009 v 10:24
zdroj uživatelem

hlasů
1

Ok, je to tak daleko, dal jsem to do prá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));
        }
    }
}

Nyní, v 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];  
}

Ale pak, jak nastavit aktuální pohled a jak obnovit tabbar?

Odpovězeno 11/02/2009 v 21:23
zdroj uživatelem

hlasů
1

Můžete skrýt stavový řádek voláním

setStatusBarHidden:(BOOL)

Na odkazem UIApplication, jako tak.

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

[application setStatusBarHidden:YES];

}

Chcete-li se zbavit liště karet si můžete udělat výstup odkazů mezi stavitel rozhraní do kódu a volání

[myUITabBar removeFromSuperview];

To by mohlo fungovat, i když jsem nebyl testován to, pokud jde o ostatní otázky, já nejsem 100%, že ještě předtím řešit problémy.

Odpovězeno 11/02/2009 v 13:20
zdroj uživatelem

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