Tastaturanimationsprobleme beim Aufruf von 'answerFirstResponder' in einem Modal View Controller

8

Ich habe Probleme mit dem Aufruf von -becomeFirstResponder auf einem UITextField , das mit einem View Controller enthalten ist, der modal präsentiert wird. Ich rufe diese Methode in der -viewDidLoad -Methode des modalen View-Controllers auf, so dass die Tastatur sofort angezeigt wird. Was ich erwartet habe, ist, dass sowohl die Tastatur als auch der modale View-Controller gleichzeitig von unten nach oben animiert werden. Was ich jedoch beobachte, ist folgendes:

  1. Zwischen dem Klicken auf die Schaltfläche, die die Methode -presentModalViewController:animated: auf dem übergeordneten Ansichtscontroller aufruft, und dem Beginn der animalen Animation des untergeordneten Ansichtscontrollers gibt es eine U2-Verzögerung von ca. 0,2 Sekunden.
  2. Die Tastatur wird sofort mit absolut keiner Animation dargestellt, sobald die Animation des modalen View-Controllers beginnt.
  3. Sobald die Animation des Modal View Controllers abgeschlossen ist, scheint alles andere reibungslos zu funktionieren.
  4. Wenn Sie den Modal-View-Controller ausschalten, wird er (neben der Tastatur, zufällig) problemlos vom Bildschirm animiert.
  5. Wenn Sie auf die Schaltfläche klicken, die den Modalansicht-Controller jederzeit nach dem ersten Mal anzeigt, wird dasselbe Muster angezeigt, mit der Ausnahme, dass es keine U2-Verzögerung von ~ 0,2 Sekunden gibt.

Es ist so, als ob die Animation der Tastatur und die Animation des modalen View-Controllers gleichzeitig um eine untergeordnete Core Animation-Ressource konkurrieren würden, aber ich sehe nicht, warum dies passieren sollte. Was diese Vermutung weiter zu bestätigen scheint, ist, dass wenn ich nicht die UITextField frage, der Ersthelfer zu werden (dh, wenn ich nicht die Tastatur frage, um sich zu präsentieren), dann gibt es absolut keine UI-Verzögerung und das Modal View Controller wird sofort animiert.

Interessanterweise passiert die Animation der Tastatur, wenn ich etwas wie [self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001]; mache, fast gleichzeitig mit der Animation des modalen View-Controllers - es ist extrem schwierig zu sagen, dass sie nicht beide exakt gleich animiert sind Zeit beim Ausführen auf dem iPhone Simulator. Beim Ausführen auf einem tatsächlichen Gerät ist jedoch leicht zu bemerken, dass die Tastatur erst erscheint, nachdem der Modalansicht-Controller angezeigt wird. Wichtig ist jedoch, dass es keine Verzögerung mehr gibt.

Hat jemand etwas Ähnliches erlebt?

    
LucasTizma 25.03.2010, 01:00
quelle

5 Antworten

4

Ich glaube, Sie haben Probleme, weil Sie Animationen effektiv stapeln. Die Tastaturansicht ist in der modalen Ansicht enthalten. Die Tastaturansicht versucht, ihre Folie im Übergang im Kontext einer Ansicht zu animieren, die selbst eine Folie im Übergang animiert. Die Tastaturanimation versucht, ein bewegliches Ziel zu treffen.

Die Pause ist höchstwahrscheinlich die Laufzeit der Tastaturübergangsanimation. Ich bin ziemlich sicher, dass die Tastaturanimation Priorität von anderen Animationen ergreift, so dass sie die Neuanordnung der UI z. Scrollen einer Tabelle, so dass die Tastatur die bearbeitete Tabellenzeile nicht überlagert. In jedem Fall erfolgt die Tastaturanimation im Kontext der Superview. Dies gilt insbesondere für die modale Ansicht.

So animiert sich die Tastaturansicht selbst, aber weil die Superansicht noch nicht sichtbar ist, sehen Sie nichts. Wenn die Superansicht eingeblendet wird, ist die Tastatur bereits vorhanden, da ihre Animation abgeschlossen wurde, bevor die Superview ihre Animation gestartet hat.

Kurz gesagt, ich glaube nicht, dass Sie wirklich erreichen können, was Sie tun wollen. Stattdessen denke ich, dass Sie zuerst den Übergang der modalen Ansicht animieren und dann die Tastaturanimation ausführen müssen, oder Sie müssen akzeptieren, dass die Tastatur sofort sichtbar ist.

Ich denke, Cirrostratus 'oben ist ein guter Vorschlag. Verwenden Sie ein Bild der Tastatur, das mit der Modalansicht eingeblendet wird, und tauschen Sie es dann sofort mit der echten Tastatur aus.

    
TechZen 02.05.2010, 13:56
quelle
1

Die verzögerte Tastaturanimation störte mich auch. viewDidLayoutSubviews war die magische Methode, nach der ich gesucht habe. Wenn Sie den becomeFirstResponder -Aufruf platzieren, wird die Tastatur zeitgleich mit dem Modal verschoben.

Ссылка

    
wanderingmatt 09.05.2014 17:07
quelle
0

Versuchen Sie, Ihren Code, der den findFirstResponder aus viewDidLoad und in viewWillAppear sendet, zu verschieben. Ich denke, es fängt zu früh an, Sie möchten, dass die Tastaturanimation stattfindet, wenn die Ansicht erscheint Animation.

    
progrmr 28.04.2010 14:05
quelle
0

Sagen Sie, dass Sie auf dem Simulator Verzögerung sehen, aber nicht auf dem Gerät? Wenn dies der Fall ist, sehen Sie möglicherweise eine Verzögerung, weil Ihr Computer sich Zeit nimmt, alles in den Speicher zu laden. Wenn der Simulator das erste Mal geladen wird, wenn der Code nicht nur nativ ausgeführt wird, lädt er wahrscheinlich alle Arten von Laufzeit- und Debugging-Bibliotheken. Sobald es in den Speicher geladen wurde, ist das System wahrscheinlich ziemlich schnell. Wenn Sie eine Verzögerung auf dem Simulator haben, könnte vielleicht mehr RAM in Ihrem Rechner helfen. Wenn Ihre Maschine ein paar Jahre alt ist, denken Sie vielleicht darüber nach etwas Neues zu machen.

    
Andrew Hooke 28.04.2010 23:03
quelle
0

Dies ist, was ich gemacht habe, damit die Tastatur genau so wie ein Modalview-Controller zu animieren scheint:

In der (init) -Methode der Ansicht, die modal präsentiert wird, habe ich das UITextField erstellt und es zum ersten Responder gemacht. Wenn ich dann den Modal-View-Controller mit Animation präsentiere, erscheinen beide gleichzeitig.

    
Ngoan Nguyen 30.12.2011 07:07
quelle