Frage

Ich habe 2 GUIs bekam und 2-Controller 1 heißt landscapeguicontroller und die zweite heißt highguicontroller.

Nun rufe ich im Allgemeinen die highguicontroller, und wenn ich mein iphone drehen erkennt es, dass und dann zeigt es die landscapeguicontroller: Code:

    landscapeguicontroller *neu =[[landscapeguicontroller alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:neu animated:YES];     
    [self dismissModalViewControllerAnimated:YES];

Das Problem ist, dass dann die Animation das neue Fenster aus der Jenseits Seite des iphone schiebt in das Fenster.

In dem Landscapeguicontroller, ich habe die folgenden Zeilen hinzugefügt:

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

Wenn ich gehe zurück zum highguicontroller möchte ich nennen:

[self dismissModalViewControllerAnimated:YES];

, dass alle Werke, sondern nur in der zweiten Animation ich die richtige „Dreh Animation“ zu sehen. Haben Sie Anregungen bekommen?

So eine kurze Problembeschreibung: in der 1. Animation von hoch auf Landschaft, die Landschaft in das Fenster geschoben Aber in der 2. Animation von Landschaft zu hoch, die Rotation sieht aus wie eine echte Rotation ...

Ich möchte die 1.animation aussehen wie die 2. Animation

Mit freundlichen Grüßen Ploetzeneder

War es hilfreich?

Lösung

Um zu vermeiden, „Das Problem ist, dass dann die Animation das neue Fenster aus der Jenseits Seite des iphone schiebt in das Fenster.“, Versucht die modalTransitionStyle Eigenschaft Controller Ansicht Einstellung auf eine der folgenden Optionen, was auch immer Sie bevorzugen: typedef enum {    UIModalTransitionStyleCoverVertical = 0,    UIModalTransitionStyleFlipHorizontal,    UIModalTransitionStyleCrossDissolve, } UIModalTransitionStyle;

Auch wenn Sie die animierte Rotation vermeiden möchten, können Sie Ihre shouldRotate einstellen ... Methode andere Orientierungen nicht zulassen, aber dann einrichten Benachrichtigungen erhalten, wenn das Gerät physisch Orientierungen ändert, und präsentieren Sie Ihre modal Viewcontroller, wenn sie in der entsprechende Ausrichtung dafür. Siehe Apples „AlternateViews“ Beispielcode für ein Beispiel.

Die Meldungen beziehen sich die physische Ausrichtung des Geräts, und Sie können sie erhalten, ob die Schnittstelle geändert werden darf oder nicht. (Sie können an der statusBarOrientation Unterkunft UIApplications schauen, um zu sehen, was Orientierung der UI ist in).

Andere Tipps

Es klingt wie Sie die Reihenfolge wollen, so gehen:

  1. dreht das Gerät physisch von Hoch- auf Querformat
  2. Animieren der Portraitansicht (highguicontroller) auf Landschaft
  3. Drücken Sie die Landschaftsansicht (landscapeguicontroller) nach oben aus dem neuen „Boden“ des Bildschirms

Wenn das stimmt, dann werden Sie so etwas wie die folgenden in Ihrer highguicontroller Implementierung haben müssen:

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

Diese kümmert sich um Schritt 2 (es wird das Hochformat auf Querformat in beide Richtungen drehen).

Dann werden Sie so etwas wie dies wollen:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
  if(fromInterfaceOrientation == UIInterfaceOrientationPortrait) {
    [self presentModalViewController:landscapeguicontroller animated:YES];
  }
  else {
    [self dismissModalViewControllerAnimated:YES];
  }
}

Das sollte die Landschaftsansicht präsentieren, nachdem die Rotation Animation abgeschlossen ist und entlässt es dann, nachdem das Gerät gedreht zurück zum Portrait ist.

Ich hoffe, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top