2011-02-15 5 views
34

코드 내 -(void)setEditing:(BOOL)editing animated:(BOOL)animated 메서드를 호출하여 탐색 바의 RHS에있는 두 개의 단추를 서로 바꿉니다.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.addToOrderButtonawakefromNib에서 미리 정의 된 UIBarButtonItems, 설치를 포함하는 인스턴스 변수입니다.

self.addToOrderButton의 버튼을 self.addItemButton에있는 한 후 상당히 넓은, 그래서 편집 상태의 변화가 트리거 될 때 나는의 LHS에 editButtonItem 표준을 눌러 (두 폭 사이의 미묘한 애니메이션으로 자신을 싶습니다 탐색.

I 버튼 변화가 있지만, 자신의 위치보다 왼쪽 상단-아니라 개별적으로 제자리에 위치가 비행하고 그들의 폭을 애니메이션으로 애니메이션 않습니다 [UIView beginAnimations:nil context:NULL];[UIView commitAnimations];와 전체 if:else을 둘러싸고합니다.

탐색 표시 줄 요소에 애니메이션을 적용하는 방법 그래서 각 개별 버튼 (RHS 버튼, 제목)이보다 적절하고 제한적인 방식으로 움직입니다.

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

... 당신을 위해 그것을 애니메이션됩니다

답변

67
self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

은 오른쪽과 왼쪽 바 버튼 항목을 애니메이션하는 데 사용할 수있는 구체적인 방법이 있습니다. 애니메이션을 적용하기 위해 필요한 모든 항목 (제목 포함)이 필요하면 탐색 모음의 setItems:animated: 메서드를 사용할 수도 있습니다 (표시 할 탐색 항목의 배열에 전달).

+0

답변을 수락했습니다. 그건 정확히 당신이 묘사하고 잘 작동합니다. 많은 감사합니다. 옆으로, 발생하는 실제 애니메이션을 조정할 수있는 방법이 있습니까? 여기에 제시된 것처럼 크로스 페이드 (cross-fade)가 가능합니다. 그러나 '프레임'의 텍스트에 대한 크로스 페이드와 버튼 LHS의 애니메이션 이동의 조합은 훨씬 더 좋습니다. – creednmd

+1

SDK에는 직접적인 메소드가 없습니다. 아마도 무언가를 직접 구현할 수는 있지만, 중요하지는 않습니다 (범주로 메서드를 재정의하고 자신의 전환으로 바꾸는 것과 같은). – lxt

+0

내가 문서를 공부할 필요가있는 것처럼 들린다. 그래도 옳은 길에 나를 데려 와줘서 고마워. – creednmd

관련 문제