2009-12-11 13 views
8

Ich entwickle eine iPhone-Anwendung, die mehrere Nibs hat, und sollte nur Landschaft sein.Landscape nur iPhone App mit mehreren Nibs

Die Anwendung wird im Landscape-Modus über ihre Info.plist-Datei gestartet.

Ich habe zwei View-Controller: FirstViewController und SecondViewController.

Für jede dieser habe ich eine Nib-Datei, wo die Ansicht in Landschaft ist. Beide Ansichtssteuerungen werden meiner Quelle MainView als Ausgänge hinzugefügt, und ihre Ansichten werden langsam initialisiert.

Wenn die Anwendung geladen wird, wird wie erwartet die erste Ansicht im Querformat angezeigt. Wenn ich jedoch in die zweite Ansicht umschalte, bleibt das Gerät (oder der Simulator) im Querformat, aber die Ansicht wird gedreht, als ob das Gerät im Hochformat wäre und meine Schnittstelle bremste.

In beiden UIViewController Klassen ich den folgenden Code haben:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return interfaceOrientation == UIInterfaceOrientationLandscapeRight; 
} 

und Ansichten in meine app-Delegaten zu wechseln, ich tue:

[viewController.view removeFromSuperview]; 
[window addSubview:secondViewController.view]; 

wo viewController und secondViewController sind die beiden Auslässe wo die View-Controller angeschlossen sind. Diese

ist, wie die zweite Ansicht sieht in IB: alt text http://img27.imageshack.us/img27/4898/picture1ni.png

und das ist, wie es im Simulator aussieht: alt text http://img402.imageshack.us/img402/4866/picture2wt.png

Warum ist, dass die zweite Ansicht in Landschaft Anzeige aber mit der Schnittstelle gedreht?

Ich möchte nicht mit Transform-Eigenschaften befassen, da das übertrieben scheint.

Antwort

3

Ich spielte diese Frage in der Hoffnung, jemand würde Ihnen eine aufschlussreiche Antwort geben und ich würde etwas lernen. Leider habe ich Angst, dass Sie möglicherweise Transformationen verwenden müssen, damit dies richtig funktioniert. Hier ist der Code, den ich habe in letzter Zeit mit dem Problem zu lösen:

- (void)forceLandscapeForView:(UIView *)theView { 
    theView.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    theView.bounds = CGRectMake(0, 0, 480, 320); 
    theView.center = CGPointMake(160, 240); 
    [theView setNeedsLayout]; 
    [theView setNeedsDisplay]; 
} 

Dann, wenn Sie Ihre neue Ansicht hinzufügen, überprüfen Sie die aktuelle Ausrichtung und ggf. Kraft der Rotation:

if (!UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { 
    [self forceLandscapeForView:_activeViewController.view]; 
} 

Dann natürlich werden Sie angemessen auf shouldAutorotateToInterfaceOrientation in jedem Ihrer Ansicht-Controller reagieren möchten:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

ich würde gerne über alternative Lösungen zu hören, wenn diese nicht alle erfor ist sary.Es gibt auch eine Einschränkung, die ich bei dieser Konfiguration bemerkt habe: Wenn Sie einen Übergang zwischen den Ansichten haben und das Telefon während dieses Übergangs drehen, ist es möglich, dass die Ansichtenorientierungen in der falschen Querformatausrichtung umgedreht werden Sie müssen das Telefon umdrehen (Querformat rechts oder Querformat links), während Sie zwischen den Ansichten navigieren.

+0

Bisher erwies sich dies als der zuverlässigste Ansatz, um das zu erreichen, was ich will. – pgb

+0

Dies (die erste Methode) funktionierte für mich. Ich war auf der Suche nach einer Lösung für Stunden und ich habe früher etwas ähnliches versucht (aber in den Ansichten didLoad ...). Wenden Sie die obige Transformation an, bevor Sie sie als Unteransicht hinzufügen. – Wollan

0

Es ist nur ein Vorschlag, aber Sie können versuchen, NO in der Methode shouldAotorotate für die zweite Ansicht zurückzugeben. Oder versuche es in der Portraitansicht im IB. Es scheint, dass Ihre Ansicht korrekt geladen wurde (im Landscape-Modus), aber dann wurde die Nachricht autAutotate empfangen und um 90 Grad gedreht.

+0

Ich habe es schon versucht, und nicht geklappt. – pgb

Verwandte Themen