我在我的代码中调用-(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;
}
}
在awakefromNib
中设置了预定义的UIBarButtonItems,其中self.addItemButton
和self.addToOrderButton
是实例变量。
self.addToOrderButton
中的按钮比self.addItemButton
中的按钮要宽得多,因此我希望在编辑状态发生更改时(通过在导航栏左侧的标准editButtonItem
上轻按触发),它们之间有一个微妙的宽度动画。
如果我将整个if:else
语句用[UIView beginAnimations:nil context:NULL];
和[UIView commitAnimations];
包围起来,则按钮更改会进行动画处理,但它们的位置会从左上角分别飞入到指定位置,而不是在原地并且只是动画化宽度。
我该如何对导航栏元素进行动画处理,使每个单独的元素(RHS按钮、标题)以更合适、更克制的方式动画化?
setItems:animated:
之前,请注意它不能用于navigationController
的navigationBar
上。否则,您将会遇到以下异常:Cannot call setItems:animated: directly on a UINavigationBar managed by a controller.
- Andrii Chernenko