2011-02-15 41 views
34

我正在調用我的代碼中的-(void)setEditing:(BOOL)editing animated:(BOOL)animated方法,以在我的導航欄右側的兩個按鈕之間切換。如何動畫UINavigationBar中的按鈕更改?

-(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,設置在awakefromNib的ivars。

self.addToOrderButton按鈕是顯著較寬則一個在self.addItemButton,所以我喜歡他們的希望是兩個寬度之間的微妙的動畫的編輯狀態的變化被觸發時(通過輕敲標準editButtonItem上的LHS導航。

如果我環繞整個if:else[UIView beginAnimations:nil context:NULL];[UIView commitAnimations];按鈕變化確實動畫,但它們的位置飛入位分別從左上角,而不是地方,只是動畫它們的寬度。

如何爲導航欄元素設置動畫效果使每個人(RHS按鈕,標題)以更適當,更剋制的方式生成動畫?

回答

67
self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

有你可以用動畫的右側和左側欄按鈕項目具體方法:

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

...這將動畫給你。如果您需要一切設置動畫(包括標題),您還可以使用導航欄的setItems:animated:方法(將其傳遞到您要顯示的導航項目的數組中)

+0

我接受了答案,如這完全符合你所描述的並且工作正常。非常感謝。順便說一句,有沒有一種方法來調整發生的實際動畫?如此處所呈現的那樣,這是一種交叉漸變 - 這很好 - 但是對於文本的交叉漸變和對於「幀」的按鈕LHS的動畫移動的組合會更好。 – creednmd 2011-02-15 18:51:29

相關問題