2011-02-15 11 views
34

Llamo al método -(void)setEditing:(BOOL)editing animated:(BOOL)animated en mi código para alternar entre dos botones en el RHS de mi barra de navegación.Cómo animar un cambio de botón en UINavigationBar?

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    // Toggle ‘+’ and ‘Add To Order’ button.  

    if(editing) { 
    self.navigationItem.rightBarButtonItem = self.addItemButton; 
    } 
    else {   
    self.navigationItem.rightBarButtonItem = self.addToOrderButton; 
    } 
} 

Dónde self.addItemButton y self.addToOrderButton son ivars contienen UIBarButtonItems predefinidos, de configuración en awakefromNib.

El botón de self.addToOrderButton es significativamente más ancha que la de self.addItemButton, así que me gustaría su ser una animación sutil entre los dos anchos cuando se activa el cambio de estado de edición (pulsando un estándar editButtonItem en la LHS de la navegación.

Si me rodeo toda la if:else con [UIView beginAnimations:nil context:NULL]; y [UIView commitAnimations]; el botón cambio no animar, pero con sus posiciones de vuelo en su lugar de forma individual desde la parte superior izquierda en lugar de en su lugar y simplemente animar a sus anchuras.

Cómo animo el elemento de la barra de navegación s de modo que cada uno individual (el botón RHS, el título) se anima de maneras más apropiadas y restringidas?

Respuesta

67
self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

hay métodos específicos que se pueden utilizar para animar los elementos de botón de barra de la izquierda y la derecha:

[self.navigationItem setRightBarButtonItem: self.addToOrderButton animated:YES]; 

... que animará por usted. Si necesita todo para animar (incluido el título) también puede usar el método setItems:animated: de su barra de navegación (páselo en una matriz de elementos de navegación que le gustaría ver)

+0

He aceptado la respuesta, ya que eso hace exactamente lo que describes y funciona bien. Muchas gracias. Como un aparte, ¿hay un método para ajustar la animación real que está ocurriendo? Como se presenta aquí, eso hace un fundido cruzado, lo que está bien, pero una combinación de fundido cruzado para el texto y movimiento animado del botón LHS para el 'marco' sería aún mejor. – creednmd

+1

No hay un método directo en el SDK, no. Probablemente podría implementar algo usted mismo, pero no sería trivial (algo así como anular el método con una categoría y reemplazarlo con su propia transición). – lxt

+0

Suena como algo en lo que necesitaría estudiar los documentos; gracias por ponerme en el camino correcto sin embargo. – creednmd

Cuestiones relacionadas