iPhone Flip-Animation mit UIViewAnimationTransitionFlipFromleft im landscape-Modus
Arbeite ich auf eine iPhone Applikation, die ich umgesetzt habe eine animation UIViewAnimationTransitionFlipFromleft. Hier meine Anwendung funktioniert gut in den Portrait-Modus. Es ist dabei die gleiche animation wie angegeben bedeutet, dass Flip von Links nach Rechts.
Aber wenn ich das Tue UIViewAnimationTransitionFlipFromleft im landscape-Modus ist, dann ist es nicht rotiert von Links nach rechts. Statt es dreht von oben nach unten. Das ist wirklich kritische Frage. Können Sie mir helfen, diese zu lösen.
Den code, den ich benutze für iPhone-Anwendung, um die Ansicht zu drehen ist wie folgt:
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view.window cache:NO];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];
[UIView commitAnimations];
[self.navigationController pushViewController:objSecond animated:YES];
Dank,
Beste Grüße,
Gurpritsingh Saini
- Sind Sie sicher, dass Ihre Anwendung unterstützt Querformat? Von dem, was Sie beschreiben, es klingt wie Ihre app muss eine FlipFromLeft im portrait-Modus unabhängig davon, wie Sie das Gerät halten (quer-oder hochformat)
- Hallo, Meine Anwendung unterstützt alle vier Ausrichtungen verfügbar im iPhone. Im portrait-Modus es ist in Ordnung, die fliping-animation von Links nach rechts. Aber in den ladscape-Modus anstelle von spiegeln von Links nach rechts schlägt von oben nach unten. Können Sie mir helfen, das Problem zu lösen.
- können Sie formatieren Sie Ihren code richtig? Warum machen Sie...sich selbst.Blick.Fenster.transform = CGAffineTransformMakeRotation(M_PI * 0.50)
- Oh Sorry, Das war ein versehen. Ich war gerade testen, aber das nicht funktionierte. Können Sie mir bitte helfen. Ich brauche es dringend.
- Ein Punkt: In deinem code oben, bist du mit dem älteren UIView-Methode beginAnimations:Kontext:. Der context-parameter nicht ein CGContextRef. Es ist ein Schlüssel, den Sie verwenden, um nachzuverfolgen, welche animation ist das. Es soll ein NSString. Ich würde erwarten, dass die übergabe in einem CGContextRef würde eine compiler-Warnung, und es kann zu Speicher-management-Probleme, weil ein CGContextRef ist ein Core-Foundation-Objekt, nicht ein NSObject.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit iOS 4.0 oder höher, die folgenden wird genau das tun, was Sie wollen (habe es gerade getestet, um sicherzustellen,)
EDIT: ich bin ändern Sie den obigen code ein bisschen (nichts neues, nur das auskommentieren der navigation-controller ist, weil es HIERFÜR nicht notwendig).
Also es gibt mehrere Möglichkeiten zu gehen über diese (so weit das im Auge behalten der nächsten Ansicht), aber dies ist die einfachste, die ich mir denken kann. Können Sie schon die Schalter von Bild 1 zu 2, also werde ich erklären, wie man von 2 bis 10 (oder wie viele Sie benötigen).
Grundsätzlich die Ansicht, der übergang dauert zu lange für
viewDidLoad
zu fangen, einen Anruf zu gehen, um die nächste Ansicht. Was wir also tun müssen, ist, einen timer einrichten, der wartet, und sendet eine Methode zu wechseln, zu einem späteren Zeitpunkt. Also das ist der code, den Sie sehen in der view 2 (und 3 und 4 usw.).Ich nur 1 Sekunde warten, bis ich rufe die switch-Methode, aber wenn Sie be eine Menge in Ihren Ansichten, möchten Sie vielleicht ein bisschen länger warten. 1,5 Sekunden sollte mehr als genug sein, aber Sie können spielen, um mit, um zu sehen, wo es funktioniert und nicht funktioniert.
Als Nächstes müssen Sie aufrufen, um die nächste Ansicht, in der
switchView
Methode.Dies funktionierte perfekt für mich. Nur um sicherzugehen, war ich immer neue Ansichten, die ich zugewiesen tags für jede Ansicht Hinzugefügt und UILabels, wie Untersichten in jeder Ansicht
viewDidLoad
Methode und jede zeigte die Anzahl Ihrer anzeigen. So hoffentlich ist das, was man benötigt. Ich bin sicher, Sie haben mehr komplexe Dinge, die Sie tun müssen, aber dies wird Ihnen die animation und Logik, die Sie benötigen, um das gewünschte Aussehen zu erhalten. (on a side note,viewDidAppear
offenbar nicht aufgerufen, wenn Sie dies tun, so kann es notwendig werden, rufen Sie es manuell ausviewDidLoad
wenn Sie wirklich brauchen, es zu benutzen, aber ansonsten funktioniert es einwandfrei)viewDidLoad
hieß für jeden, aber nichtviewDidAppear:
, das war sehr verwirrend. Also, wenn Sie Probleme mit den Methoden, würde ich vorschlagen, melden Sie IhrviewDidLoad
zu gewährleisten, werden die Ansichten erstellt, dann versuchen Sie, stellen Sie sicher, keinen wichtigen code ist inviewDidAppear:
da es offenbar nicht aufgerufen (ich wirklich wünschte, ich wüsste, warum das passiert)Müssen Sie manuell fügen Sie eine transformation zu Ihrer Sicht; die flip-transformation immer arbeitet, als wenn der view-controller wurden im hochformat.
Beachten Sie, dass das Kontext-argument
+beginAnimations:context:
ist nicht dazu gedacht, eineCGContextRef
per se. Sie wahrscheinlich nicht wollen, übergeben Sie die aktuellen Grafik-Kontext gibt. PassNULL
statt.Versuchen Sie es mit diesem :
Ich denke, das wird klappen.
{}
Taste), um die format-code - mehr helfen hierDie Akzeptierte Antwort von slev nicht für mich arbeiten, ich habe alle möglichen Fehler nach dem Versuch, den code in meine custom Segue. Ich fand eine Methode, die nicht nur funktioniert, aber ist präziser, denn es erfordert nicht die Verwendung eines Timers. Hier ist MySegue.m:
Ich habe auch eine zweite Klasse für flips auf der rechten Seite.
Code stammt von dieser website: http://www.dailycode.info/Blog/post/2012/11/29/iOS-Custom-Flip-Segue-(portrait-and-landscape-layout)-xcode-4.aspx