Cómo animar un cambio de botón en UINavigationBar?


Estoy llamando al método -(void)setEditing:(BOOL)editing animated:(BOOL)animated en mi código para intercambiar entre dos botones en el RHS de mi barra de navegación.

-(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;  
  } 
}

Donde self.addItemButton y self.addToOrderButton son ivars que contienen UIBarButtonItems predefinidos, configurados en awakefromNib.

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

Si rodeo todo el if:else con [UIView beginAnimations:nil context:NULL]; y [UIView commitAnimations]; el cambio de botón se anima, pero con sus posiciones-volando en su lugar individualmente desde la parte superior izquierda-en lugar de en su lugar y simplemente animando sus anchuras.

¿Cómo animo los elementos de la barra de navegación para que cada uno individual (el botón RHS, el título) se anime de maneras más apropiadas y restringidas?

Author: creednmd, 2011-02-15

1 answers

self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

Hay métodos específicos que puede usar para animar los elementos de los botones de la barra derecha e izquierda:

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

...que lo animará para ti. 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ásela en una matriz de los elementos de navegación que desea mostrar)

 73
Author: lxt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-15 17:05:57