Cum rotire vedere peisaj într-o aplicație tabbar

voturi
7

Am o aplicație bazată pe tabbar.

Eu construiesc 2 puncte de vedere, un portret și altul în modul peisaj în interfața Builder.

Acum, vreau ceva de genul iPod App. Vreau vizualizarea peisaj să fie tot ecranul, și ascunde tabbar & bara de stare.

Eu fac să lucreze de bază de acest lucru:

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

Dar toate funcționează dezordonat. Punctul de vedere peisaj nu umple corect zona si comenzile sunt amplasate în locații greșite, ca diferent primul construit în acest sens.

De asemenea, nu am găsit încă o modalitate de a ascunde orice altceva ...

Întrebat 10/02/2009 la 22:59
sursa de către utilizator
În alte limbi...                            


5 răspunsuri

voturi
5

Uită-te la „AlternateViews“ mostre de cod Apple.

Ideea de bază este că puteți detecta orientarea fizică a dispozitivului cu notificări, și apoi activați un nou controler de vizualizare „modal“ și să-l solicite ecran complet. Dezactivați interfața de rotație de a avea shouldAutorotate ... întoarce DA numai pentru o orientare, din moment ce faci toate astea manual cu notificări. Când modificați orientarea fizică, controlerul vedere modal este fie prezentat sau respins.

Publicat 30/11/2009 la 01:47
sursa de către utilizator

voturi
1

Se pare că există un număr destul de mare codificatori care doresc să aibă un element de bara de tab-le la un ecran complet peisaj vedere (nici o bara de stare, bara de tab) și apoi reveniți.

Am postat o anchetă cu privire la acest lucru, dacă este într-adevăr posibil, pe Apple dezvoltatorii forum, dar nu au avut încă un răspuns.

De ce este greu? (Ne pare rău, o întrebare newbie? Se pare că unele lucruri destul de evidente, nu ar trebui să fie greu) Nimeni nu l-am găsit încă on-line are un răspuns clar la acest lucru.

Publicat 15/11/2009 la 02:21
sursa de către utilizator

voturi
1

Când mă uit la app iPod, mi se pare că punctul de vedere TabBarController nu este înlocuită sau modificată în nici un fel. Cred că există doar o tranziție estompare între vizualizarea tabbarcontroller și vizualizarea Coverflow.

Dacă aș fi, aș încerca (nu sunt sigur dacă acest lucru ar putea să funcționeze), cu un controler Coverflow, cu vedere afișată în partea de sus de vedere al tabBarController lui. Dacă ar împiedica tabBarController din autorotating punctul său de vedere, dar în acel moment mi-ar dispărea punctul de vedere și se estompeze în vizualizarea Coverflow, care ar fi doar peisaj.

Nu știu dacă ar avea statusbar un comportament adecvat, și am lăsat o mulțime de detalii pentru tine de a rezolva, dar, în orice caz, cred că ar fi o idee bună de a avea două controlere distincte, unul a arătat în peisaj, alta (tabBar) în portret.

Sper că vă va ajuta.

Publicat 14/11/2009 la 10:24
sursa de către utilizator

voturi
1

Ok, până aici am pus acest lucru la locul de muncă:

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

Acum, în 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];  
}

Dar atunci cum setați vizualizarea curentă și modul în care a restabili tabbar?

Publicat 11/02/2009 la 21:23
sursa de către utilizator

voturi
1

Puteți ascunde bara de stare prin apelarea

setStatusBarHidden:(BOOL)

pe o referință UIApplication, cum ar fi acest lucru.

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

[application setStatusBarHidden:YES];

}

Pentru a scapa de tabbar puteți face o priză de referențiere în constructor Interfață la codul și apelul

[myUITabBar removeFromSuperview];

Asta ar putea să funcționeze, cu toate că nu l-am testat, ca și pentru celelalte întrebări, eu nu sunt 100%, după ce nu a abordat problemele înainte.

Publicat 11/02/2009 la 13:20
sursa de către utilizator

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