Как анимировать изменение кнопки в UINavigationBar? - PullRequest
35 голосов
/ 15 февраля 2011

Я вызываю метод -(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.addItemButton и self.addToOrderButton - это ивары, содержащие предопределенные UIBarButtonItems,setup в awakefromNib.

Кнопка в self.addToOrderButton значительно шире, чем в self.addItemButton, поэтому я хотел бы, чтобы они были тонкой анимацией между двумя значениями ширины при изменении состояния редактированиясрабатывает (при нажатии стандартного editButtonItem на LHS навигационной системы.

Если я окружаю все if:else с помощью [UIView beginAnimations:nil context:NULL]; и [UIView commitAnimations];, изменение кнопки происходит анимация, но с их позициями -взлетание на место по отдельности из верхнего левого угла, а не по месту, и только анимация их ширины.

Как я анимирую элементы панели навигации, чтобы каждый отдельный элемент (кнопка RHS, заголовок) анимировался более подходящим образом,сдержанные пути?

1 Ответ

74 голосов
/ 15 февраля 2011
self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

Существуют специальные методы, которые можно использовать для анимации элементов правой и левой панели:

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

... что оживит это для вас. Если вам нужно все для анимации (включая заголовок), вы также можете использовать метод setItems:animated: на панели навигации (передать его в массив элементов навигации, которые вы хотите отобразить)

...