• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

InterfaceOrientation für einen bestimmten View erlauben

Matak

Braeburn
Registriert
08.02.13
Beiträge
46
Hi,

ich möchte meine iPadApp für Landscape bauen. Nur einem bestimmten ViewController möchte ich auch den Portraitmodus erlauben und wenn ich wieder zurückgehe, soll er wieder in Landscape wechseln.

Ich arbeite mit dem Storyboard und habe in den Deployment Infos nur Landscape Left und Right angehakt.

was ich da schon versucht habe:

-(BOOL)shouldAutorotate
{
returnYES;
}

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation {
returnYES;
}

-(NSUInteger)supportedInterfaceOrientations
{
returnUIInterfaceOrientationMaskAll;
}

Viele Grüße
Matak
 
Die Methode shouldAutorotateToInterfaceOrientation: brauchst du nur, wenn du iOS Versionen kleiner 6.0 unterstützen willst. shouldAutorotate brauchst du auch nicht zu überschreiben, denn die Defaultimplementierung gibt YES zurück. Das erstmal vorweg.

Zum eigentlichen Problem. In den Deployment Infos musst du alle Orientierungen erlauben, die in deiner App vorkommen können und in den jeweiligen ViewControllern musst du dann die Einschränkung der Orientierungen in supportedInterfaceOrientations vornehmen.
 
Das habe ich schon versucht. Trotzdem kann ich alle Views dann auf Portrait drehen :/

-(NSUInteger)supportedInterfaceOrientations
{
returnUIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

und

-(NSUInteger)supportedInterfaceOrientations
{
UIInterfaceOrientationMaskLandscape
}

beide versucht.
 
Dann vermute ich mal, dass die ViewController alle in einem NavigationController stecken, richtig?
 
Dann musst du eine Subklasse von UINavigationController erstellen und diese verwenden. In dieser Subklasse überschreibst du dann supportedInterfaceOrientations wie folgt:

Code:
-(NSUInteger)supportedInterfaceOrientations {
    return [self.topViewController supportedInterfaceOrientations];
}

Warum du das so machen musst, ist in der Dokumentation zu UIViewController im Abschnitt „Handling View Rotations“ beschrieben.
 
Ich habe noch ein weiteres Problem.. im NavigationController funktioniert es.. jetzt habe ich allerdings ein TabBarController drumgebaut.. und es funktioniert nicht mehr.

Was ich schon versucht habe:

-(UIInterfaceOrientation)tabBarControllerPreferredInterfaceOrientationForPresentation:(UITabBarController *)tabBarController

{
returnUIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}


-(NSUInteger)tabBarControllerSupportedInterfaceOrientations:(UITabBarController *)tabBarController

{
return [self.presentingViewControllersupportedInterfaceOrientations];
}



-(BOOL)shouldAutorotate

{
returnNO;
}


Wäre echt nett, wenn noch mal jemand helfen könnte :)

Ach und Danke an MacApple, habe ich letztes mal irgendwie vergessen zu schreiben!
 
Das sind beides Delegate Methoden. Hast du diese denn auch im Delegate des TabBarControllers implementiert? Und wenn du bei shouldAutorotate NO zurück gibst, dreht sich ja gar nichts mehr.
 
Ja, den Delegate habe ich gesetzt und mit shouldAutorotate YES dreht sich alles
 
Es soll sich ja nur ein bestimmter ViewController drehen. Jetzt ist es so, dass sich entweder all oder keiner dreht
 
Nun, da musst du einfach, wie beim UINavigationController, den geraden angezeigten ViewController befragen.

Code:
- (NSUInteger)tabBarControllerSupportedInterfaceOrientations:(UITabBarController *)tabBarController {
    return [tabBarController.selectedViewController supportedInterfaceOrientations];
}
 
Dann hast du die Methode tabBarControllerSupportedInterfaceOrientations: nicht im Delegate des UITabBarControllers implementiert oder das Delegate nicht gesetzt.
 
Es funktioniert noch nicht ganz.. Ich habe jetzt nur noch den NavigationController.

Wenn ich die App starte, wechselt es ohne Probleme in Landscape. Wenn ich allerdings aus dem View, der Portrait kann, zurück gehe, wechselt die App nicht in Landscape modus