2013-12-09 4 views
0

값을 사용자 정의 함수로 보간하는 것은 매우 쉽습니다. 그러나 그것은 나쁜 습관입니까? 대신 프레임 워크에 애니메이션 커브를 설명하기 위해 keyTimes, timingFunctions 또는 timingFunction을 사용해야합니까? 커스텀 애니메이션 커브를 가지고 작업 할 때 나는 왜 내가 왜 그 속성들을 사용해야하는지 알지 못합니다. 나는이 일을 올바르게하고 싶다.왜 CAKeyframeAnimation에서`keyTimes`,`timingFunctions` 또는`timingFunction`을 사용합니까?

잘 작동합니다. 예상대로 지정 입방 용이성 아웃 애니메이션 커브 뷰 위치를 애니메이션을 코어 애니메이션은 선형 보간하는

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position.x"]; 
anim.duration = 5; 
NSUInteger numberOfFrames = anim.duration * 60; 

NSMutableArray *values = [NSMutableArray new]; 

for (int i = 0; i < numberOfFrames; i++) 
{ 
    CGFloat linearProgress = (double) i/(double) numberOfFrames; 
    CGPoint position = view.layer.position; 
    position.x = 10 + (300 * CubicEaseOut(linearProgress)); 
    [values addObject:[NSValue valueWithCGPoint:position]]; 
} 

anim.values = values; 

[view.layer addAnimation:anim forKey:@"position"]; 
+0

중간 값을 모두 계산하지 않고 'CAAnimation' 클래스가 보간을 처리하기를 원합니까? – hfossli

답변

1

내 방법은 애니메이션 키 프레임 (300)을 추가한다. 비선형 보간법을 사용하는 키 프레임을 더 적게 사용하여 동일한 결과를 얻는 것보다 두 가지 이유가 있습니다. 즉, (1) 더 많은 데이터를 CA에 보내야합니다. 즉, 모든 애니메이션 프레임을 저장하고 읽는 데 더 많은 데이터가 필요합니다. (2) 애니메이션을 느리게하여 300 개 이상의 프레임이 렌더링되면 선형 보간 아티팩트가 표시 될 수 있습니다.

3s 애니메이션이 하나 뿐인 경우 그 이유 중 어느 것도 중요하지 않을 수 있습니다. 예 : 한 번에 100 개의 10 초 애니메이션을 모두 실행하면 적은 키 프레임을 사용하는 경우보다 성능이 저하 될 수 있습니다.

+0

와우. 이것은 나를 이해하는 데 정말로 도움이되었습니다. – hfossli