2011-04-28 5 views
9

나는 반복 애니메이션을 어떻게 설정할 수 있는지 궁금합니다. 반복 횟수는 변수에 의해 결정되어야합니다. 다음 코드에서 변수 int newPage은 애니메이션이 반복되는 빈도를 결정해야합니다. 가변 횟수의 애니메이션 반복하기

나는이 시도하지만 (블록 애니메이션을 사용) 애니메이션이 한 번만 실행 된 : 나는 다음을 코딩 할 경우 내가 그것을 할 같은

for (int temp = 1; temp <= newPage; temp++) { 
      [self animatePage]; 
} 

, 그것은, 작동하지만이 하드 코드 (예 : 애니메이션 두 번 반복됩니다) 나는 얼마나 자주이 애니메이션은 코드를 실행하고 내 변수 NEWPAGE에 따라됩니다의 수 변경하는 방법의 방법으로 볼 수 없습니다 :

[UIView animateWithDuration:0 
         delay:0.1 
      options:UIViewAnimationOptionCurveEaseIn 
      animations:^{[self animatePage];} 
      completion:^(BOOL finished){[self animatePage];}]; 

나는 매우 감사하게 될 거라고를 동일한 애니메이션을 하드 코드하지 않고 반복하는 방법에 대한 제안 이 애니메이션을 되풀이하기를 원하는 횟수.


편집 :

나는 다음과 같은 코드를 구현하려고했으나 단 하나의 애니메이션이 실제로 수행됩니다

 [UIView animateWithDuration:0 
          delay:1 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 

         [UIView setAnimationRepeatCount:2]; 
         [self animatePage]; 

        } 
        completion:nil]; 
+0

알다시피, 나는 "removeAllAnimations"가 당신이 여기있는 것임을 확신합니다 - 아래 답변을 참조하십시오, 건배! – Fattie

답변

28

같은 문제가 있었다 지연 간격으로 재생해야 할 수도 있습니다 - 당신이없는 않던 an'UIViewAnimationOptionRepeat '

이 작동합니다 : 나를 위해 속임수를 썼는지

[UIView animateWithDuration:0 
         delay:1 
        options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionRepeat 
       animations:^{ 
        [UIView setAnimationRepeatCount:2]; // **This should appear in the beginning of the block** 
        [self animatePage]; 

       } 
       completion:nil]; 

.

7

당신은 반복 횟수를 설정하려고 했습니까? + (void)setAnimationRepeatCount:(float)repeatCount

나는 다음과 같은 코드 블록을 시도했습니다, 그리고 그것은 확실히 (난 Y의 디렉토리에 X의 디렉토리 및 3 배에서 2 배에 의해 확장 된 UITextView이었다) 나를 위해 배를 반복 :

[UIView animateWithDuration:2 
delay:0.1 
options:UIViewAnimationOptionCurveEaseIn 
animations:^{ [UIView setAnimationRepeatCount:2]; 
l.transform = CGAffineTransformMakeScale(2,3); } completion:nil]; 
+0

아니요. 좋은 생각! 하지만 어떻게 구현해야합니까? 미안 기본이지만, 나는이 모든 것을하기보다는 오히려 새로운 것입니다. –

+0

@DavidNeiss : 방금 시도했지만 작동하지 않습니다. 2로 설정하면 하나의 애니메이션 만 실행됩니다. 위의 코드를 적절하게 업데이트하여 구현 방법을 확인할 수 있습니다. 당신의 도움을 주셔서 감사합니다. –

+0

@David : 코드를 답안으로 편집해야합니다. –

2

이유는 당신이 보는이 arent하지만 하나의 애니메이션으로 인해 당신이 [self animatePage]를 호출하는 대신 (한 애니메이션)

을, 같은 runloop에서 루프에서 애니메이션을 호출 경력이 마지막 호출에 resuting 있다는 사실에,

를 호출하려고 할 것입니다
[self performSelector:@selector(animatePage) withObject:nil afterDelay:.1 *temp]; 

이렇게하면 별도의 스레드에서 호출이 만들어집니다.

당신이

+0

무슨 뜻인지 알지만 짧은 간격으로는 작동하지 않습니다. 나는 실제로 0.1이 필요하고 제안 된 코드 행은 1.0 이상에서만 작동합니다 (너무 느림). 그래도 고마워! –

+2

별도의 스레드를 만들지 _ 않습니다. –