Wie dreht Blick auf Landschaft in einem Tabbar App

stimmen
7

Ich habe eine Tabbar basierte Anwendung.

Ich baue 2 Ansichten, ein im Hochformat und ein anderes im Querformat im Interface Builder.

Nun, ich mag so etwas wie der iPod App. Ich will die Landschaftsansicht Vollbild sein, und blenden Sie die Tabbar & die Statusleiste.

Ich mache den grundlegendsten dies funktioniert:

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

Aber alle arbeiten chaotisch. Die Landschaftsansicht nicht richtig auf den Bereich füllen und die Kontrollen sind in der falschen Orten befinden, diferent als ersten desingned.

Auch ich noch nicht einen Weg zu verstecken alles andere gefunden ...

Veröffentlicht am 10/02/2009 um 22:59
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
5

Schauen Sie sich Apples „AlternateViews“ Beispielcode.

Die Grundidee ist, dass Sie die physische Ausrichtung des Geräts mit Benachrichtigungen erfassen können, und aktivieren Sie dann einen neuen View-Controller „modal“ und hat es den ganzen Bildschirm anfordern. Sie deaktivieren Schnittstelle Rotation, indem shouldAutorotate ... zurück JA nur für eine Orientierung, da Sie dies alles manuell mit Benachrichtigungen tun. Wenn Sie die körperliche Ausrichtung zu ändern, Ihr Modal-View-Controller entweder präsentiert oder abgewiesen.

Beantwortet am 30/11/2009 um 01:47
quelle vom benutzer

stimmen
1

Es scheint eine angemessene Anzahl von Coder zu sein, die sie zu einer Landschaftsansicht Vollbild eines Tab-Leiste Element in Anspruch nehmen wollen (keine Statusleiste, keine Tab-Leiste) und kommt dann zurück.

Ich habe eine Anfrage über gepostet, ob dies tatsächlich möglich, auf dem Apple-Entwickler-Forum, habe aber noch keine Antwort habe.

Warum ist das schwer? (Sorry, ein Neuling Frage? Es scheint, wie einige ziemlich offensichtliche Dinge nicht schwer sein sollte) Niemand, den ich gefunden habe noch Online eine klare Antwort auf diese hat.

Beantwortet am 15/11/2009 um 02:21
quelle vom benutzer

stimmen
1

Wenn ich auf dem iPod App aussehen, so scheint es mir, dass die TabBarController Ansicht in keiner Weise ersetzt oder modifiziert wird. Ich denke, es ist nur ein Fade-Übergang zwischen der TabBarController Ansicht und der Coverflow-Ansicht.

Wenn ich Sie wäre, würde ich versuchen, (nicht sicher, ob dies funktionieren könnte) mit einer Coverflow-Controller, mit Blick auf die Auffassung des TabBarController angezeigt. Wenn würde die TabBarController aus autorotating seiner Ansicht verhindern, aber in diesem Moment würde ich seine Ansicht verblassen und verblassen in der Coverflow-Ansicht, die Landschaft nur sein würde.

Ich weiß nicht, ob das statusBar ein richtiges Verhalten haben würde, und ich ließ viele Details für Sie in Ordnung bringen, aber auf jedem Fall denke ich, es wäre eine nette Idee, um zwei getrennte Controller, ein zeigte in der Landschaft, die andere (die tabBar) in Porträt.

Ich hoffe, dass wird Ihnen helfen.

Beantwortet am 14/11/2009 um 10:24
quelle vom benutzer

stimmen
1

Ok, das ist so weit ich habe dies an der Arbeit:

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

Jetzt, in der 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];  
}

Aber dann einstellen, wie die aktuelle Ansicht und wie die Tabbar wiederherstellen?

Beantwortet am 11/02/2009 um 21:23
quelle vom benutzer

stimmen
1

Sie können die Statusleiste ausblenden, indem Sie anrufen

setStatusBarHidden:(BOOL)

auf einer UIApplication Referenz, wie so.

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

[application setStatusBarHidden:YES];

}

Um erhalten die Tabbar befreien können Sie eine Referenzierung Steckdose im Interface Builder, um Ihren Code und Anruf

[myUITabBar removeFromSuperview];

Das könnte funktionieren, obwohl ich es nicht getestet habe, wie für die anderen Fragen, ich bin nicht 100%, bevor die Probleme nicht in Angriff genommen zu haben.

Beantwortet am 11/02/2009 um 13:20
quelle vom benutzer

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