2013-01-18 5 views
4

세 개의 UIButton 오브젝트가 시각적으로 쌓여 있습니다. 사용자가 버튼을 탭하면 아래의 버튼이 일정 거리 아래로 이동해야합니다. 내가 애니메이션 지속 시간을 증가하는 경우, 예를동시에 여러 개의 UIView 애니메이션하기

// Assuming button 1 was clicked... 
[UIView animateWithDuration:0.25f 
         delay:0.0f 
        options:UIViewAnimationOptionCurveLinear 
       animations:^(void) { 
        self.button2.frame = CGRectOffset(self.button2.frame, 0.0f, 20.0f); 
        self.button3.frame = CGRectOffset(self.button3.frame, 0.0f, 20.0f); 
       } 
       completion:^(BOOL finished) { NSLog(@"Finished"); }]; 

: 나는 다음과 같은 애니메이션 블록을 사용하고 있습니다 0.25에서 0.75까지 단추가 함께 남아 있지 않지만 다른 시간 간격으로 이동하기 시작합니다. 코어 애니메이션 메서드로 애니메이션 및 기타 항목을 그룹화하여 시도했지만 아직 해결 방법을 찾지 못했습니다.

의견이 있으십니까? 지금 나는 무언가를 생각해 낼 때까지 지속 시간을 0.25로 유지하고 있습니다.

+0

은 그냥 참고로, 0.25에서 그들은 가능성도 있기 때문에 속도의 단지에 띄지 않습니다 서로 다른 속도로 이동하는 이상이다. 애니메이션을 연결하는 가장 구체적인 해결책은 @ bobnoble의 솔루션을 사용하는 것입니다. UIView 애니메이션은 기본적으로 원본 이미지 만 애니메이션으로 유지하므로 함께 머물러있게됩니다. –

+0

@ RyanPoolos 물론, 당신 말이 맞아요. 그 효과를 알지 못하면 더 나은 해결책을 찾을 때까지 충분합니다 :) – elitalon

답변

7

하나의 해결책은 button2와 button3 모두를 다른 하위 뷰로 설정하고 UIView으로 설정하고 각 버튼 대신보기를 개별적으로 애니메이션으로 만드는 것입니다. 이것이 좋은 접근 방법인지 여부는 누적 단추를 사용하여 수행하려는 작업에 따라 다릅니다.

편집 : 내 경험이 블록 내에서 애니메이션이 동기화되어 있다는 것입니다 때문에, 나는 아래 표와 같이 코드를 구현

. 애니메이션 기간 (0.15, 0.25, 0.75, 1.25)에 대해 많은 값을 시도하고 button2와 button3이 동기화되어 움직입니다. (그리고 button2가 button3 위에 있기 때문에 실제로 button3을 볼 수 없습니다. 그러면 버튼 3이 버튼 3 아래에서 움직입니다).

- (IBAction)button1Tapped:(id)sender { 
    NSLog(@"button1Tapped..."); 

    [UIView animateWithDuration:0.75f 
          delay:0.0f 
         options:UIViewAnimationOptionCurveEaseOut 
        animations:^(void) { 
         self.button2.frame = CGRectOffset(self.button2.frame, 0.0f, 20.0f); 
         self.button3.frame = CGRectOffset(self.button3.frame, 0.0f, 20.0f); 
        } 
        completion:^(BOOL finished) { NSLog(@"Finished"); }]; 
} 

- (IBAction)button2Tapped:(id)sender { 
    NSLog(@"button2Tapped..."); 

    [UIView animateWithDuration:0.75f 
          delay:0.0f 
         options:UIViewAnimationOptionCurveEaseOut 
        animations:^(void) { 
         self.button3.frame = CGRectOffset(self.button3.frame, 0.0f, 20.0f); 
        } 
        completion:^(BOOL finished) { NSLog(@"Finished"); }]; 
} 

- (IBAction)button3Tapped:(id)sender { 
    NSLog(@"button3Tapped..."); 
} 
+0

나는 이것을 생각해 보았습니다. 그러나 버튼의 수가 내일 증가하면이 솔루션은 "확장 가능"하지 않습니다. – elitalon

+0

@elitalon 왜 안 되니? 단추는 이미보기의 하위보기입니다. 다른보기로 그룹화하는 것입니다. 왜 당신이 문제를 스케일링해야하는지 모르겠다. 사실, 애니메이션 코드가 하나의 뷰를 애니메이션화하기 만하면 확장 성이 향상됩니다. 귀하의 요구 사항을 오해하지 않는 한 .. – nebs

+0

@ 넵스 5 버튼이 있다면 2, 3, 4 및 5를 서브 뷰로 그룹화해야합니다. 하지만 버튼 2를 탭하면 3, 4 및 5를 다른 하위보기로 그룹화해야합니다. 그것은 일종의 재귀 그룹핑입니다 ... – elitalon

관련 문제