2011-04-01 5 views
2

일련의 다른 애니메이션을 구현하는 것이 가장 좋은 방법인지 궁금합니다. 다음 메서드를 호출하고 오른쪽, 왼쪽 및 위로 같은 개체에 애니메이션을 적용하려고하면 컴파일러에서 선형 방식으로 처리하지 않기 때문에 작동하지 않습니다. 따라서 개체가 생깁니다. 이것에iphone 연속 애니메이션

-(IBAction)clickStart 
{ 
    [self Animation1]; 
    [self Animation2]; 
    [self Animation3]; 

} 

지금 내가 할 수있는,하지만 어떻게 든 나에게 복잡하고 이상한 느낌 : 단순히 (단계를 왼쪽 오른쪽으로 이동 건너 뛰기) 올라가고.

[pageShadowView setFrame:CGRectMake(100, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))]; 

     [UIView beginAnimations:@"Animation1" context:nil]; // Begin animation 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(Animation2)]; 

    [pageShadowView setFrame:CGRectMake(200, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))]; 

    [UIView commitAnimations]; // End animations 

을 그리고 나는 그것이 완료되면 Animation3를 호출 즉, Animation2에서 동일한 기능을 수행 할 수 있습니다 :이 Animation1 방법입니다 고려. 그러나 솔직히 말해서 이것은 매우 혼란스럽고 명확한 코딩 방법이 아닙니다. 어쨌든 내가 처음에 제안한 것과 같은 "선형"코드를 얻을 수 있습니까 (작동하지 않습니다), 아니면 단순히 선택기 메서드로 살 필요가 있습니까?

의견을 보내 주셔서 감사합니다.

답변

10

당신이 아이폰 OS < 4를 지원하지 않는 경우 : 우리는 선언적 블록 (CPAnimationSequence on Github)를 사용하여 애니메이션 단계를 체인에 대한 구성 요소를 생성

[UIView animateWithDuration:0.2 animations:^{ 
    // animation 1 
} completion:^(BOOL finished){ 
    [UIView animateWithDuration:0.2 animations:^{ 
     // animation 2 
    } completion^(BOOL finished){ 
     [UIView animateWithDuration:0.2 animations:^{ 
      // animation 3 
     }]; 
    }]; 
}] 
+0

고마워요. 비록 처음에는 혼란스러워 보일지라도, 이것은 셀렉터 방식으로 똑같은 일을하는 것보다 실제로 훨씬 더 명확하다고 생각합니다. 적어도 선형으로 표현 된 코드가 있습니다. 감사! –

+1

블록은 일반적으로 스파게티 코드로 이어지는 클래스 수준에서 애니메이션 상태를 저장할 필요가 없음을 의미합니다. – mxcl

2

.

(최대에 의해 잘 설명) 일반적인 블록 기반의 접근 방식에 비해
[[CPAnimationSequence sequenceWithSteps: 
    [CPAnimationStep   for:0.25 animate:^{ self.imageView.alpha = 0.0; }], 
    [CPAnimationStep   for:0.25 animate:^{ self.headline.alpha = 0.0; }], 
    [CPAnimationStep   for:0.25 animate:^{ self.content.alpha = 0.0; }], 
    [CPAnimationStep after:1.0 for:0.25 animate:^{ self.headline.alpha = 1.0; }], 
    [CPAnimationStep   for:0.25 animate:^{ self.content.alpha = 1.0; }], 
    nil] 
runAnimated:YES]; 

, 그것은 의도와 표현을 일치시키는 장점이있다 :

그것은 당신이 뭔가를 아주 읽을 수있는 코드를 제공하는이 선형 시퀀스의 애니메이션 단계. 우리는 an article on our iOS development blog에이 주제에 대해 자세히 설명했습니다.

관련 문제