2012-10-06 4 views
1

나는하려고하는 밀착 형 애니메이션이 있습니다. 두 단계가 있습니다.2 단계가 작동하지 않는 CATransform3D 애니메이션

1 단계 : 레이어를 가져 와서 원근감을 조금 변경하여 레이어의 상단이 뒤로 움직이는 것처럼 보입니다. sourceViewController.view.layer.transform CATransform3DMakePerspective(0, 0.003, CATransform3DIdentity);

2 단계 : 비율을 80 %로 변경하고 원근법을 정상으로 되돌립니다. 약간의 스윙처럼 애니메이션을 축소합니다.

sourceViewController.view.layer.transform = CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1);

sourceViewController.view.layer.transform CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform);

나의 가장 큰 문제는 이것이다. 나는 레이어에서 동시에 2 개의 애니메이션을 할 수 없다. 동시에 두 가지 작업을 수행하는 대신 첫 번째 변환이 끝날 때 자동으로 시작됩니다. 그것은 concat에 의해 해결 될 수 있지만, 1 단계가 일어나기를 원하기 때문에 레이어가 상태를 저장하므로 2 단계가 발생할 수 있습니다. 3 번 모두 연결할 수 없습니다.

같은 레이어에 하나 이상의 변형이있는 다중 단계 애니메이션을 만드는 방법은 무엇입니까? 아래 예에서 말한 것처럼 1 단계를 건너 뛰고 단계가 이미 완료된 것처럼 시작합니다. 나는 설명하기에 혼란 스럽다. 여기에 내 애니메이션이있다.

 
[UIView animateWithDuration:2.0 
         delay:0.0 
         options:UIViewAnimationCurveEaseIn 
        animations:^{ 
         sourceViewController.view.layer.transform = CATransform3DMakePerspective(0, 0.003, sourceViewController.view.layer.transform); 
         [UIView animateWithDuration:1.0 
               delay:1.0 
              options:UIViewAnimationCurveEaseOut 
              animations:^{ 
               sourceViewController.view.layer.transform = CATransform3DConcat(CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform)); 

              } 
              completion:nil]; 
        } 
        completion:^(BOOL finished){ 
        }];

저는 인터넷 검색을하고 모든 것을 시도했습니다. 마지막 elft가 꺼지는 장소에서 시작하는 동일한 레이어에서 연속적인 애니메이션을 수행하는 방법이 있어야합니다. 나는 Identity가 레이어가 변형 된 곳이 아닌 시작 상태로 되돌아가는 것을 읽었 기 때문에 CATransform3DIdentity 대신에 레이어를 전달할 것입니다.

답변

2

첫 번째 애니메이션이 완료 될 때까지 두 번째 애니메이션을 시작하지 않으려합니다. 그것이 완성 블록입니다.

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationCurveEaseIn animations:^{ 
    sourceViewController.view.layer.transform = CATransform3DMakePerspective(
     0, 0.003, sourceViewController.view.layer.transform); 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:1 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ 
     sourceViewController.view.layer.transform = CATransform3DConcat(
      CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1), 
      CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform)); 
    } completion:nil]; 
}]; 
+0

에서 두 번째 애니메이션이 필요합니다. 완료 될 때까지 애니메이션이 완료 될 때까지 적어도 1 초의 지연이 있습니다. 이벤트 알림에 지연이있는 것 같습니다. 단계 사이에 지연을 갖는 것은 실제로 옵션이 아닙니다. 키 프레임을 사용하여 애니메이션을 만들고 애니메이션 오브젝트를 작성하고 3 단계/키 프레임으로 레이어에 전달할 수 있습니까? –

0

당신은 내가 그 일을했고 나는 그것이 어느 정도 일을 얻을 수 있습니다 둥지의 첫 번째 완료 처리기

[UIView animateWithDuration:2.0 
         delay:0.0 
         options:UIViewAnimationCurveEaseIn 
        animations:^{ 
         sourceViewController.view.layer.transform = CATransform3DMakePerspective(0, 0.003, sourceViewController.view.layer.transform); 
        } 
        completion:^(BOOL finished){ 
             [UIView animateWithDuration:1.0 
                   delay:0.0 
                  options:UIViewAnimationCurveEaseOut 
                 animations:^{ 
                   sourceViewController.view.layer.transform = CATransform3DConcat(CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform)); 
              } 
              completion:nil]; 
        }]; 
관련 문제