【问题标题】:How to animate a button change in UINavigationBar?如何为 UINavigationBar 中的按钮更改设置动画?
【发布时间】:2011-02-16 01:05:57
【问题描述】:

我在我的代码中调用-(void)setEditing:(BOOL)editing animated:(BOOL)animated 方法来在导航栏右侧的两个按钮之间切换。

-(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 中的按钮宽得多,所以我希望它们在触发编辑状态更改时成为两个宽度之间的微妙动画(通过点击标准@987654328 @ 在导航的 LHS 上。

如果我用[UIView beginAnimations:nil context:NULL];[UIView commitAnimations]; 将整个if:else 包围起来,按钮的变化确实会产生动画效果,但是它们的位置(从左上角单独飞到适当的位置)而不是在适当的位置并且只是为它们的宽度设置动画。

我如何为导航栏元素设置动画,以便每个单独的元素(RHS 按钮、标题)以更合适、更克制的方式进行动画处理?

【问题讨论】:

    标签: iphone ios animation uinavigationbar uibarbuttonitem


    【解决方案1】:
    self.navigationItem.rightBarButtonItem = self.addToOrderButton; 
    

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

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

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

    【讨论】:

    • 我已经接受了答案,因为这完全符合您的描述并且工作正常。非常感谢。顺便说一句,有没有一种方法可以调整正在发生的实际动画?正如这里介绍的那样,这会进行交叉淡入淡出——这很好——但是将文本的交叉淡入淡出和“框架”按钮 LHS 的动画移动相结合会更好。
    • SDK中没有直接的方法,没有。您可能可以自己实现一些东西,但这并不简单(例如用类别覆盖方法并用您自己的转换替换它)。
    • 听起来像是我需要研究文档的东西;谢谢你让我走上正轨。
    • 如果你不知道也可以使用:[self.navigationItem setLeftBarButtonItem:nil animated:YES];这可以结合使用:[self.navigationItem setHidesBackButton:NO animated:YES];
    • 在尝试使用setItems:animated: 之前,请注意它不能用于navigationControllernavigationBar。你会被以下异常打脸:Cannot call setItems:animated: directly on a UINavigationBar managed by a controller.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多