2015-01-31 3 views
0

배열의 단락에서 실행하려는 UIView 애니메이션 블록이 있습니다.Swift UIView 애니메이션 블록 증가 오류

  UIView.animateWithDuration(0.4, delay: 0.2, options: .CurveEaseOut, animations: { 
       var frame = self.textViewForPlayer.frame 
       frame.origin.y += 20 
       self.textViewForPlayer.frame = frame 
       }, completion: { finished in 
        UIView.animateWithDuration(0.4, delay: 0, options: .CurveEaseOut, animations: { 
         var frame = self.textViewForPlayer.frame 
         frame.origin.y -= 80 
         self.textViewForPlayer.frame = frame 
         }, completion: { finished in 
         }) 
        } 
      ) 

      textViewForPlayer = paragraphs[++currentParagraph] 

이상한 것은 인 - 첫번째 블록 (완료 전에 제 애니메이션) 첫 번째 단락의 애니메이션을 실행되지만 두 번째 단락에 제 완료 블록이 실행에 체인화 애니메이션 (든 "단락 [++ currentParagraph] "가 두 개의 애니메이션 블록 사이에서 실행 중임

어떻게 이런 일이 일어나고 있는지 알 수 없지만, 증가 코드는 애니메이션 자체 뒤에 있으므로 기괴하거나 심지어 중간에 실행되는 버그로 보입니다

답변

1

문제는 애니메이션과 완료 블록이 후자이지만 animateWithDuration은 즉시 반환됩니다.

블록 범위 밖에있는 모든 것은 애니메이션 또는 애니메이션이 지연되는 것을 고려하지 않고 실행됩니다.

마지막으로 완료된 블록 안에 증분을 넣는 것을 고려하십시오. 이것은 두 애니메이션의 끝에서 숫자를 증가시켜야합니다.

...,completion: { finished in 
       textViewForPlayer = paragraphs[++currentParagraph] 
      }) 
+0

감사합니다. 그래서 난 미래에 어떤 정의되지 않은 지점에서 완료 블록이 호출됩니다 같아요. – Chris

+0

기본적으로 애니메이션이 끝난 후. 애니메이션은 일정한 지속 시간과 지연을 가질 수 있기 때문에 미래에 있습니다. – herby

관련 문제