He estado teniendo problemas al llamar al -becomeFirstResponder
en un UITextField
contenido con un controlador de vista que se presenta de forma modal. Llamo a este método en el método -viewDidLoad
del controlador de vista modal para que el teclado se muestre inmediatamente. Lo que esperaba es que tanto el teclado como el controlador de vista modal se animaran desde la parte inferior de la pantalla al mismo tiempo. Sin embargo, lo que estoy observando es la siguiente:Problemas de animación del teclado al llamar a becomeFirstResponder dentro de un controlador de vista modal
- Hay un segundo de retraso IU ~ 0,2 entre clic en el botón que llama al método
-presentModalViewController:animated:
en el controlador de vista de los padres y cuando el controlador de vista niño empieza a animar de forma modal. - El teclado se presenta inmediatamente sin ninguna animación tan pronto como comienza la animación del controlador de vista modal.
- Una vez que se completa la animación del controlador de vista modal, todo lo demás parece funcionar sin problemas.
- Al descartar el control de vista modal, el resultado es una animación suave y sin pantalla (junto con el teclado, por coincidencia).
- Al hacer clic en el botón que presenta el controlador de vista modal en cualquier momento después de la primera vez, se obtiene el mismo patrón, excepto que no hay ~ 0.2 segundo de retraso de IU.
Es como si la animación del teclado y la animación del controlador de vista modal estuvieran compitiendo por algún recurso de Core Animation de nivel inferior al mismo tiempo, pero no veo por qué debería estar pasando esto. Lo que más parece corroborar esta corazonada es que si no le pido al UITextField
que se convierta en el primer respondedor (es decir, si no le pido al teclado que se presente), entonces no hay absolutamente ningún desfase de UI, y el controlador de vista modal anima al instante.
Curiosamente, si hago algo como [self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001];
entonces la animación del teclado ocurre casi al mismo tiempo que la animación del controlador de vista modal - es extremadamente difícil decir que no están siendo animados a la vez. cuando se ejecuta en el simulador de iPhone. Sin embargo, cuando se ejecuta en un dispositivo real, se nota fácilmente que el teclado no aparece hasta que se presenta el controlador de vista modal. Es importante destacar que, sin embargo, ya no hay más retraso en la interfaz de usuario.
¿Alguien ha experimentado algo similar a esto?
¿Ha intentado utilizar un UIImageView del teclado en la animación para crear artificialmente la apariencia deseada? –
En un iPhone 6s con iOS 9.3.2 estoy contento con la forma en que el teclado está animado, pero observé este retraso la primera vez que llamé a becomeFirstResponder desde viewDidLoad, también. Después de algunas pruebas descubrí que la primera presentación de teclado después del lanzamiento de la aplicación se retrasa, no importa cómo se active. Y que este retraso solo ocurre cuando se adjunta el depurador. –