2015-01-23 4 views
2

저는 수동으로 애니메이션을 적용하고자하는 시작과 끝이 모두 CATransform3D입니다. 즉, 시간에 대한 중간 변환을 계산하고 싶습니다. t = 0 (시작)에서 1 (종료). 변환이 변환 및 변환의 조합입니다.어떻게 두 개의 CATransform3D 사이를 수동으로 보간 할 수 있습니까?

Apple은 처음부터 끝까지 자동으로 애니메이션을 적용하는 여러 가지 방법을 제공하지만, 실제로 특정 중간 단계에서 중간 변환을 계산해야한다는 것을 알고 있습니다.

+0

매우 까다로울 수 있습니다. 예를 들어 중심이 아닌 회전을 생각해보십시오. 보다 간단한 보간은 시작 위치와 끝 위치 사이의 직선에있는 값으로 끝날 수 있지만 예상되는 중간 값은 시작점과 끝점 사이에있는 각도만큼 비 중심 회전입니다. 회전. –

+0

@ DavidRönnqvist 나는 일반적인 경우가 어려울 수도 있다고 걱정했다. 필자의 경우에는 번역과 스케일링을 보간하면된다. –

답변

0

일반적인 경우는 악취입니다. 특별한 경우가 더 쉽습니다. 아이덴티티 변환을 시작한다고 가정하면 스케일 및 변환 설정 값을 보간하는 코드를 작성하고 각 프레임에 대해 새 변환을 작성한 다음 해당 변환을 적용하는 것이 좋습니다. 축척 및 번역의 변경은 둘 다 수학적으로 간단합니다. 회전은 trig가 포함되어 있기 때문에 더 비싸지 만 (느리게 읽음) 계산됩니다.

+0

실제로 해당 행렬 값을 보간하는 함수를 작성했지만 m11, m22, m33 (번역 값) 및 m41, m42, m43 (축척 값) 만 작성했습니다. 그 일을하는 과정은 이것들이 모두 서로 독립적이라는 것을 분명히했습니다. 그래서 당신이 제안한 것을 수행하는 것은 똑같은 결과를 만들어냅니다. 훨씬 더 깨끗합니다. –

+0

물론, 행렬의 크기와 변환 값을 수정하는 함수는 어쨌든 행렬의 해당 항목에 대해서만 작용하며 매우 빠릅니다. –

관련 문제