web-dev-qa-db-ja.com

UINavigationBarでボタンの変更をアニメーション化する方法は?

コード内で-(void)setEditing:(BOOL)editing animated:(BOOL)animatedメソッドを呼び出して、ナビゲーションバーのRHSにある2つのボタンを切り替えています。

-(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を含むivarであり、awakefromNibで設定されます。

self.addToOrderButtonのボタンはself.addItemButtonのボタンよりもかなり幅が広いので、編集状態の変更がトリガーされたとき(標準のeditButtonItemをタップすることにより)、2つの幅の間の微妙なアニメーションにしたいと思います。ナビゲーションのLHSで。

if:else全体を[UIView beginAnimations:nil context:NULL];[UIView commitAnimations];で囲むと、ボタンの変更はアニメーション化されますが、位置をアニメーション化するだけでなく、左上から個別に配置されます。幅。

ナビゲーションバーの要素をアニメーション化して、個々の要素(RHSボタン、タイトル)をより適切で制限された方法でアニメーション化するにはどうすればよいですか?

36
creednmd
self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

左右のバーボタンアイテムをアニメーション化するために使用できる特定の方法があります。

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

...それはあなたのためにそれをアニメーション化します。アニメーション化するすべてのもの(タイトルを含む)が必要な場合は、ナビゲーションバーのsetItems:animated:メソッドを使用することもできます(表示するナビゲーションアイテムの配列に渡します)。

75
lxt