2009-03-23 12 views
0

Ich verstehe, Sie können eine Landschaft für die gesamte Anwendung angeben, aber was ist, wenn es teilweise in Landschaft und teilweise im Hochformat ist.Wie gehen Sie mit Potrait- und Landschaftsansichten um?

Derzeit habe ich einige Ansichten, die im Grunde Bilder sind. Diese Bilder wurden gedreht, sodass der Benutzer weiß, dass bestimmte Abschnitte der Anwendung im Querformatmodus sind. All meine UILabels werden ebenfalls gedreht, um diesen Effekt zu erzielen.

Meine Frage ist, gibt es einen besseren Weg, damit umzugehen. Gibt es eine Möglichkeit, die Ausrichtung zur Laufzeit programmatisch festzulegen? In diesem Fall würde ich meine Bilder/Uilabels nicht mehr drehen müssen.

Nur um zu verdeutlichen, brauche ich keine Auto-Rotation-Funktionalität, die Art und Weise, dass es jetzt implementiert wird, erfasst alle Funktionen, die ich in die App aufnehmen möchte, aber ich wollte nur wissen, ob es eine weniger umständliche Art ist Landschafts-/Hochformatansichten innerhalb derselben Anwendung bearbeiten.

Antwort

4

Sie können die Rotation jederzeit erzwingen, indem Sie aufrufen;

UIApplication *application = [UIApplication sharedApplication];  
[application setStatusBarOrientation: UIInterfaceOrientationWHATEVER animated:NO]; 

Meine aktuelle Anwendung ist in erster Linie Landschaft, hat aber ein paar Hochformatansichten. In den Ansichtscontrollern, die den Ansichten entsprechen, sollte der Benutzer in der Lage sein, sich zu drehen, ich erlaube die Drehung, aber verhindere die Animation. Dies ermöglicht Ihnen, zu einer anderen Ansicht in Ihrer NIB zu wechseln, ohne dass Sie eine seltsame Slid-off-Screen-Verschraubung bekommen, die normalerweise auftritt, wenn Sie während der Animation auf eine Ansicht stapeln.

Hoffentlich finden Sie das hilfreich!

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
if (interfaceOrientation == UIInterfaceOrientationPortrait) { 
    rotatingToPortrait = YES; 
    [UIView setAnimationsEnabled:NO]; 
    return YES; 
} else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    rotatingToPortrait = NO; 
    [UIView setAnimationsEnabled:NO]; 
    return YES; 
} 
// Catch upside-down 
return NO; } 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
[UIView setAnimationsEnabled:YES]; 
if (rotatingToPortrait) { 
    // Swap in portrait view here 
} else { 
    // Swap it out here 
} } 
+0

Aus meiner eigenen Erfahrung, wenn Sie Animationen stoppen es wirklich in -willRotateToInterfaceOrientation als -shouldAutorotateToInterfaceOrientation wird sein soll, wenn das Umschalten zwischen Controller bezeichnet. – mattmook

0

Zur Zeit kenne ich keine Möglichkeit, die Ausrichtung programmatisch zu steuern. Das heißt, es gibt keine Möglichkeit, dem Gerät zu sagen, dass es jetzt "in die Landschaft drehen" soll. Sie können nur angeben Dinge wie:

(BOOL) ShouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation

können Sie festlegen, welche Ansicht-Controller welche Orientierungen unterstützen und durch zwingende Funktionen auf die Orientierungsänderungen reagieren, aber wann und wie diese Funktionen genannt werden, wird vom System bestimmt. Sie können auch detailliertere Nachrichten von der UIDevice-Klasse erhalten.

Wenn ich richtig verstehe, was Sie sagen, ist Ihre App im Wesentlichen immer in einer einzigen Ausrichtung, aber Sie zeichnen nur Ihre verschiedenen Ansichten anders, so dass es scheint, dass bestimmte Teile der App im Hoch-/Querformat Modus sind? Es klingt wie Sie versuchen, ein Quadrat in ein rundes Loch zu passen, die Orientierungs-APIs des iPhones waren nicht für diese Art von Verhalten ausgelegt, und Sie arbeiten besser mit den APIs als gegen sie.

Verwandte Themen