如何在UINavigationBar中为按钮更改设置动画?

时间:2011-02-15 16:42:46

标签: iphone ios animation uinavigationbar uibarbuttonitem

我在我的代码中调用-(void)setEditing:(BOOL)editing animated:(BOOL)animated方法来在导航栏的RHS上的两个按钮之间进行交换。

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

其中self.addItemButtonself.addToOrderButton是包含预定义UIBarButtonItems的ivars,请在awakefromNib中进行设置。

self.addToOrderButton中的按钮明显宽于self.addItemButton中的按钮,所以我希望它们在触发编辑状态更改时(通过点击)在两个宽度之间成为一个微妙的动画导航LHS上的标准editButtonItem

如果我用if:else[UIView beginAnimations:nil context:NULL];围绕整个[UIView commitAnimations];,按钮更改会生成动画,但是他们的位置会从左上角单独飞行到位,而不是就位只是动画他们的宽度。

我如何设置导航栏元素的动画,以便每个人(RHS按钮,标题)以更合适,更有限的方式制作动画?

1 个答案:

答案 0 :(得分:74)

self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

您可以使用特定方法为右侧和左侧条形按钮项设置动画:

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

...将为您制作动画。如果您需要动画的所有内容(包括标题),您还可以使用导航栏的setItems:animated:方法(将其传递给您想要显示的导航项目数组)