4

UIViewAnimationCurveLinear를 사용하여 두 점 사이의 뷰에 애니메이션을 적용하므로이 애니메이션의 속도를 알 수 있습니다. 특정 상황에서 UIViewAnimationCurveEaseOut을 추가하여보기를 더디게 멈추게하려고합니다. 이 효과를 원활하게하려면 손쉬운 애니메이션은 이전의 선형 애니메이션과 같은 속도로 시작해야합니다. 이 완화가 발생하기를 원하는 고정 된 거리가 주어지면이 시작 속도를 달성하는 데 필요한 지속 시간을 어떻게 계산할 수 있습니까?시작 속도와 거리를 알고있는 UIViewAnimationCurveEaseOut 애니메이션의 지속 시간을 어떻게 계산합니까?

예를 들어, x = 0에서 x = 100까지 10 초 동안 내보기에 애니메이션을 적용한다고합시다. 따라서 속도는 10 픽셀/초입니다. UIViewAnimationCurveEaseOut 애니메이션을 사용하여 x = 100에서 x = 120까지보기가 감속되기를 바랍니다. 이 애니메이션은 10 픽셀/초에서 시작되도록하기 위해 어떤 지속 시간을 사용해야합니까?

Core Animation의 CAMediaTimingFunction은 큐브 베 지어 곡선을 사용하여 애니메이션 페이싱을 제어합니다. 두 번째 및 세 번째 제어점이 곡선의 모양을 지정합니다. 나는 UIViewAnimationCurve 여유 함수가 3 차 베 지어 곡선이라고 가정합니다. 이 함수들이 사용하는 기본 컨트롤 포인트를 알고 있다면 속도와 거리가 지정된 지속 시간을 계산하는 공식을 계산할 수 있어야하지만 어디에서나 이러한 기본 컨트롤 포인트를 찾을 수는 없습니다.

+0

전체 애니메이션에 걸쳐 EaseOut을 사용하지 않는 이유는 무엇입니까? –

답변

1

완전한 답변을 드릴 수는 없지만 CAMediaTimingFunction의 -getControlPointAtIndex : values ​​: 메소드를 알려줄 수는 있습니다. 그렇게하면 EaseOut 타이밍 함수를 생성 한 다음 제어점을 검사 할 수 있습니다.

CAKeyframeAnimation을 사용하여 수행 한 맞춤 가속도 곡선에 대해서도 article by Matt Gallagher에 대해 알려 드리겠습니다.이 가속도 곡선은 사용자에게 유용 할 수도 있습니다.

0

1 픽셀/초의 속도에서 시작하여 1 초 길이의 애니메이션에 대한 베 지어 곡선의 정수를 근사화하는 상수 (BEZIER_INTEGRAL_CONSTANT)를 사용할 수 있습니다. 선형 이징의 경우이 상수는 0.5입니다. UIViewAnimationCurveEaseOut의 경우는 0.7입니다. 지속 기간면에서 공식은 다음과의 거리가 20 개 픽셀 출발 속도이다하여 예를 들어

duration = distance/(velocity * BEZIER_INTEGRAL_CONSTANT) 

10 개 픽셀/초, 지속 시간은 약되어야이다 20/(10 * 0.7) = 2.9 seconds.