1

보기의 transform 속성에 애니메이션을 적용하려고합니다. 나는 "변환"하는 방법 animationWithKeyPath:의 매개 변수를 설정 할 때마다 나는 오류가 어떤 이유로CAKeyframeAnimation Keypath 오류

CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
NSArray *transformValues = [NSArray arrayWithObjects: 
         [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation((3*M_PI)/8)], 
         [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-((3*M_PI)/8))], 
         [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation((3*M_PI)/8)], 
         [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-((3*M_PI)/8))], 
         [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation((3*M_PI)/8)], 
         [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-((3*M_PI)/8))], 
         nil]; 

[shakeAnimation setValues:transformValues]; 

NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.16f],[NSNumber numberWithFloat:0.33f],[NSNumber numberWithFloat:0.49f],[NSNumber numberWithFloat:0.66f],[NSNumber numberWithFloat:0.82f], [NSNumber numberWithFloat:1.0f], nil]; 

[shakeAnimation setKeyTimes:times]; 

NSArray *timingFunctions = [NSArray arrayWithObjects: 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
nil]; 

[shakeAnimation setTimingFunctions:timingFunctions]; 

shakeAnimation.fillMode = kCAFillModeForwards; 
shakeAnimation.removedOnCompletion = NO; 
shakeAnimation.duration = 1.0f; 

[self.someView.layer addAnimation:shakeAnimation forKey:@"anim"]; 

: 여기 내 코드입니다. 이 디버깅 30 분 동안 시도했지만 오류를 찾을 수 없습니다. 나는 처음에 그 불구하고 나는있는 UIView의 transform 속성에 허용되지 않는 애니메이션을 수행했지만, 나는 이런 식으로 뭔가를 할 수 있다는 사실을 알고 : 고급의

aView.transform = CGAffineTransformMakeRotation(M_PI/2); 

감사합니다.

답변

4

레이어의 transform 속성 값은 CGAffineTransform이 아닌 CATransform3D입니다.

또한 transform.rotation.z 키 경로에 애니메이션을 적용하는 것이 더 간단 할 수 있습니다. 값은 단지 CGFloat이므로 변환 행렬을 전혀 만들 필요가 없습니다.

“Modifying a Transform Using Key Paths” in Core Animation Programming Guide
“Key Path Support for Structure Fields” in Core Animation Programming Guide

+0

당신 말이 맞아! 뷰의'transform' 속성에 대해 생각하고있었습니다. 정말 고마워. 또한,'transform.rotation.z' 키 경로가 취하는'CGFloat' 값은 무엇을 의미합니까? 각도 (라디안 또는 도인 경우)? – pasawaya

+0

Nevermind. 당신의 링크를 확인했습니다. 라디안 단위의 회전 각도입니다. – pasawaya