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

cre*_*nmd 36 iphone animation uinavigationbar uibarbuttonitem ios

-(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;  
  } 
}
Run Code Online (Sandbox Code Playgroud)

其中self.addItemButtonself.addToOrderButton是包含预定义UIBarButtonItems的ivars,设置为awakefromNib.

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

如果我周围全if:else[UIView beginAnimations:nil context:NULL];[UIView commitAnimations];按钮更改确实动画,但他们从左上角,而不是替代的位置,飞入个别地方,只是动画它们的宽度.

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

lxt*_*lxt 75

self.navigationItem.rightBarButtonItem = self.addToOrderButton; 
Run Code Online (Sandbox Code Playgroud)

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

 [self.navigationItem setRightBarButtonItem: self.addToOrderButton animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

  • 在尝试使用`setItems:animated:`之前,请注意它不能在`navigationController`的`navigationBar`上使用.您将受到以下异常的打击:`无法直接在由控制器管理的UINavigationBar上调用setItems:animated: (2认同)