2012-11-27 4 views
1

오른쪽 검색 막대를 왼쪽으로 20 픽셀 길게 만들고 오른쪽으로 왼쪽 검색 막대 길이를 애니메이션으로 줄이려고합니다. 어떻게해야합니까?UISearchBar를 애니메이션으로 x 방향으로 늘리는 방법은 무엇입니까?

CGRect leftFrame = self.leftSearchBar.frame; 
    //leftFrame.origin.x = leftFrame.origin.x - 20; 
    leftFrame.size.width = leftFrame.size.width - 40; 

    CGRect rightFrame = self.rightSearchBar.frame; 
    rightFrame.origin.x = rightFrame.origin.x - 40; 
    rightFrame.size.width = rightFrame.size.width + 40; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

    self.leftSearchBar.frame = leftFrame; 
    self.rightSearchBar.frame = rightFrame; 

    [UIView commitAnimations]; 

작동하지 않습니다. 먼저 애니메이션없이보기의 크기를 조정 한 다음 애니메이션으로 오른쪽보기를 이동합니다.

+0

"작동하지 않습니다. 먼저 애니메이션없이보기의 크기를 조정 한 다음 애니메이션으로 오른쪽보기를 이동합니다." 다른 곳에서는 프레임을 변경하고 있습니까? 이로 인해 애니메이션이 방해받을 수 있습니다. – WDUK

+0

아니요. 코드를 변경하면됩니다. – Burak

답변

1

앵커 포인트를 변경하지 않았다고 가정하면 너비를 단순히 확장하면 오른쪽으로 늘어납니다. 그래서, 질문 내의 사양에 따라 UIView의 애니메이션 블록 내에서이 랩, 그리고 애니메이션을해야합니다

UISearchBar* searchbar = ...; // However you've created your UISearchBar, we'll refer to it as 'searchbar' 

CGRect searchFrame = searchbar.frame; 
[UIView animateWithDuration:0.8 
         delay:0.0 
        options:UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ 
        searchFrame.size.width += 30; 
        searchbar.frame = searchFrame; 
       } 
       completion:nil]; 

당신은 그렇지 않으면 같이 += 30 한 번 이상 호출되지 않습니다 있는지 확인해야합니다 당신은 때마다 30 포인트 씩 확대 될 것입니다. 수작업으로 크기를 알고 있다면 단순히 = size + 30으로 대체 할 수 있습니다. 이는 애니메이션을 두 번 이상 호출 할 때 더 안전합니다.

+0

프레임 속성을 직접 조작 할 수 없으므로 searchbar.frame.size.width + = 30; 작동하지 않습니다. 그것을 변수에 할당하는 것이 가장 좋습니다 : CGRect searchFrame = searchbar.frame; searchFrame.size.width + = 30; [검색 창 setFrame : 검색 프레임]; –

+0

물론 사과는 대답이 수정되었습니다. – WDUK

+0

읽기 전용 변수가 할당되지 않는다고 말하는 'searchFrame.size.width + = 30;'오류가 발생합니다. – icodes

관련 문제