I am calling the -(void)setEditing:(BOOL)editing animated:(BOOL)animated
method in my code to swap between two buttons on the RHS of my navigation bar.
-(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;
}
}
Where self.addItemButton
and self.addToOrderButton
are ivars containing predefined UIBarButtonItems, setup in awakefromNib
.
The button in self.addToOrderButton
is significantly wider then the one in self.addItemButton
, so I’d like their to be a subtle animation between the two widths when the change in editing state is triggered (by tapping a standard editButtonItem
on the LHS of the navigation.
If I surround the whole if:else
with [UIView beginAnimations:nil context:NULL];
and [UIView commitAnimations];
the button change does animate, but with their positions—flying into place individually from the top left—rather than in place and just animating their widths.
How I animate the navigation bar elements so that each individual one (the RHS button, the title) animate in more appropriate, restrained ways?
There are specific methods you can use to animate the right and left bar button items:
...which will animate it for you. If you need everything to animate (including the title) you can also use the
setItems:animated:
method of your navigation bar (pass it in an array of the navigation items you'd like to display)