2012-11-24 4 views
1

키 프레임 값 대신 경로로 CAKeyframeAnimation을 사용하여 속성을 움직이게 할 수 있습니까? 여기에 키 코드는 다음과 같습니다CAKeyframeAnimation 불투명도 정의 경로?

CAKeyframeAnimation *theLeftGradientAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; 
theLeftGradientAnimation.removedOnCompletion = NO; 
theLeftGradientAnimation.fillMode = kCAFillModeForwards; 
theLeftGradientAnimation.duration = (isToClose ? self.fromDuration : self.toDuration); 

//test with a linear monotonic path to define the opacity function response 
UIBezierPath *shadePath = [UIBezierPath bezierPath]; 
[shadePath moveToPoint:CGPointMake(0.0f, 0.0)]; //ASSUME coords are: x->t y->alpha(t) 
[shadePath addLineToPoint:CGPointMake(1.0f, 1.0f)]; //ASSUME time normalized to duration 
[shadePath closePath]; 

theLeftGradientAnimation.path = shadePath.CGPath; 

그러나,이 하지 잘 작동하지 단조 또는 정확하게 경로의 변화에 ​​따라 (경로가 '정상화'이라고 가정하지만, 부드럽게 애니메이션 않습니다 불투명도를 properly- 않습니다 (0.0,0.0)에서 (1.0,1.0)에 이르는 함수). 나는 이 아니며은 위치에 애니메이션을 적용하거나 경로에서 레이어를 움직이는 것이 아니라 모든 애니메이션 가능한 속성에 사용하기를 희망합니다.

경로가 애니메이션 시간 대 애니메이션 속성의 전달 함수를 효과적으로 정의하는 데 효과적으로 사용될 수 있음을 암시하는 약간의 모호함이 있습니다 (따라서 생성 된 키 프레임 값의 배열을 대체합니다). 그 전달 함수). 또한 "키 프레임 타이밍 및 간격 설정 확장 기능"에 대한 iOS 6 문서에서 경로 대 값의 사용을 명확하게하려고 시도하지만 여전히 모호합니다.

답변

0

CAKeyframeAnimationtimingFunctions (복수) 속성을 가지며 timingFunction은 무시합니다. 당신의 경우에는 단조 로움을 원하기 때문에 theLeftGradientAnimation.timingFunction = kCAMediaTimingFunctionLinear을 설정하는 것이 좋습니다. 기본 timingFunction은 실제로 비선형 적으로 보간을 수행합니다.

timingFunctions에 대한 자세한 설명과 기본 제공되는 것만으로 충분하지 않은 경우 CAMediaTimingFunction을 제공하는 방법은 문서를 참조하십시오.

+0

경로 속성을 가정 한대로 지정하면 timingFunction를 사용할 수 없습니다 (행운도 함께 시도 함). 테스트 코드는 이것이 어떻게 작동 하는지를 결정할 목적으로 만 선형 일음 함수를 지정합니다. 궁극적으로 복잡한 비선형 함수를 사용하여 속성을 애니메이션 방식으로 애니메이트하고 싶습니다 (functionWithControlPoints :::로 사용자 정의 할 방법이 없습니다). – Rich

+0

이 의도에 대해 명확하지 않은 것에 대해 사과드립니다. 경로 기능이 아닌 키 프레임 값을 지정할 때 선택적 기능을 사용하므로 timingFunctions (복수형)도 중복됩니다. 불행히도 CAKeyframeAnimation 코드 샘플이 없으며이 사용법이 유효한 지 알 수 없습니다. – Rich

+0

문서를 읽는다면, 경로에 타이밍 구성 요소가 전혀 포함되어 있지 않고, 단지 균일하게 간격을 둔 값의 목록으로 효과적으로 작동하는 것처럼 보입니다. 어떻게 CGPoint 값이 알파와 같은 스칼라 값으로 변환 될지 모르겠습니다. 내가 너라면, 먼저'values'와'keyTimes'로 시도해보고,'calculationMode'가 가장 잘 작동하는지 실험해볼 것입니다. 'timingFunctions','timingFunction' (단수)에 대한 문서를 다시 읽는 것은'CAKeyframeAnimation'에서 전혀 작동하지 않습니다. 당신은 어떻게 당신의 가치관을 관찰하고 있습니까? – fzwo