Estoy cambiando las pestañas mediante programación en una aplicación basada en la barra de pestañas usando UITabBarController.selectedIndex
. El problema que intento resolver es cómo animar la transición entre las vistas. es decir. desde la vista de la pestaña actual a la vista de la pestaña seleccionada.
La primera idea fue hacer uso de UITabBarControllerDelegate
, pero parece que no se llama cuando se cambia de pestaña mediante programación. Ahora estoy considerando el UITabBarDelegate.didSelectItem
: como un posible gancho para establecer una animación de transición.
¿Alguien ha logrado animar las transiciones? Si es así, ¿cómo?
ios4
uitabbarcontroller
uitabbar
drekka
fuente
fuente
Respuestas:
Actualización 04/2016: Justed quería actualizar esto para agradecer a todos por todos los votos. Tenga en cuenta también que esto se escribió originalmente cuando ... antes de ARC, antes de las restricciones, antes ... ¡muchas cosas! Por lo tanto, tenga esto en cuenta al decidir si utilizar estas técnicas. Puede haber enfoques más modernos. Ah, y si encuentras uno. Agregue una respuesta para que todos puedan verla. Gracias.
Algún tiempo después ...
Después de mucha investigación, se me ocurrieron dos soluciones de trabajo. Ambos funcionaron e hicieron la animación entre pestañas.
Solución 1: transición desde la vista (simple)
Este es el más fácil y utiliza un método de transición UIView predefinido. Con esta solución no necesitamos administrar las vistas porque el método hace el trabajo por nosotros.
Solución 2: scroll (más complejo)
Una solución más compleja, pero le brinda más control de la animación. En este ejemplo, las vistas se activan y desactivan. Con este tenemos que gestionar las vistas nosotros mismos.
Esta solución en Swift:
fuente
shouldSelectViewController
método del delegado de TabBar y devolvió NO allíLo siguiente es mi intento de usar el formulario de código drekka en el método delegado (UITabBarControllerDelegate)
fuente
Mi solución para iOS7.0 o superior.
Puede especificar un controlador de animación personalizado en el delegado de la barra de pestañas.
Implemente un controlador de animación como este:
Luego úselo en su UITabBarControllerDelegate:
fuente
En lugar de usar
tabBarController:shouldSelectViewController:
es mejor implementartabBarController:animationControllerForTransitionFromViewController:toViewController:
TransitioningObject.swift
TabBarViewController.swift
fuente
Creo que puedes lograr fácilmente transiciones para UITabBarControlelr usando CATransition; Esto también resolverá los efectos secundarios del uso de transitionFromView: toView:
Use esto dentro de su clase TabBarController personalizada extendida desde UITabBarController.
Espero que esto ayude :)
fuente
Escribí una publicación después de probar las diversas respuestas aquí.
El código está en Swift, y puede cambiar programáticamente la pestaña con animación llamando
animateToTab
.Si desea que todos los cambios de pestaña tengan la animación, conéctelo
UITabBarControllerDelegate
como tal:fuente
Mi solución en Swift:
Cree una clase TabBar personalizada y configúrela en su TabBar del guión gráfico
fuente
finished
será falso). No sé por qué sucedió eso, pero creo que tiene que ver con la transformación de CA, que piensa que "no hay nada que animar". Cambié a la animación con marcos y funcionó.Usé la solución de @ Mofumofu y la actualicé a Swift 1.2 y también implementé una animación arriba / abajo. Es decir, el nuevo ViewController aparece y empuja al anterior si el índice del nuevo viewcontroller es mayor que el anterior. De lo contrario, la dirección es hacia abajo.
En el Container ViewController:
fuente
Aquí está mi solución Swift 3:
Anulo selectedIndex de mi UITabBarViewController así:
Luego utilizo esta función que imita la animación push / pop nativa:
Espero que ayude :)
fuente
una solución para la animación nerviosa ...
UIView * fromView = self.view.superview;
fuente
esto se puede solucionar de dos formas
1 - Escriba esto en su archivo AppDelegate.m una vez. Recuerde incluir UITabBarControllerDelegate usando <> después de dos puntos (:) en su AppDelegate.h
2 - Escriba esto en cada uno de sus archivos ViewController.m
espero que esto ayude...!
fuente
Puede animar según el elemento seleccionado: en este ejemplo, volteamosFromLeft si el índice tocado es> que el índice seleccionado anteriormente y volteamosFromRight si el índice tocado es <que el índice seleccionado anteriormente. Esto es Swift 4: Implemente el método UITabBarControllerDelegate
fuente
La respuesta de drekka es realmente genial. Modifiqué un poco la transición de desplazamiento para que la animación se pareciera más a la animación push de Apple. Agregué una animación adicional al completar la primera animación para que el efecto de deslizamiento se vea bien.
fuente
Quería usar una transición de giro entre dos controladores de vista infantil al presionar un botón y lo logré de la siguiente manera:
También configuré el color de fondo en negro, en mi caso lo hice configurando navigationController.view.backgroundColor pero en su caso podría ser window.backgroundColor que se puede configurar fácilmente en el delegado de la aplicación.
fuente
Aquí está mi código de trabajo ( para 3 pestañas , ¡no lo he probado en más!) Para animar las transiciones entre pestañas. Se basa principalmente en la solución de drekka, pero ya está implementado en el método de delegado de la barra de pestañas, por lo que debería hacer el trabajo si solo lo copia / pega ... (¡nunca se sabe!)
}
fuente
Esto me funciona en Swift 3:
fuente
@samwize Respuesta traducida a Swift 3 - 2 pulgares arriba en este, crea un efecto de página de izquierda a derecha:
fuente
La respuesta de @ samwize se actualizó para Swift 5:
Si desea que todos los cambios de pestaña tengan la animación, utilice un UITabBarControllerDelegate e implemente este método:
Cambie programáticamente la pestaña con animación llamando a
animateToTab
:fuente
Rápido 4+
Tu
UITabBarControllerDelegate
método debería ser así,Y el método es,
fuente