2011-02-03 4 views
0

Core Animation을 사용하여 하위 클래스 UIView에 애니메이션을 적용하고 싶습니다. 제 경우의 이상한 점은 애니메이션을 모든 프레임마다 고정 된 양으로 실행하고 지속 시간으로 실행하지 않기를 바란다는 것입니다. 따라서 100 -> 200의 애니메이션은 100 -> 50보다 오래 걸리지 만 뷰의 "속도"는 일정해야합니다. 내 코드는 현재 다음과 같습니다.지정된 기간없이 값으로 UIView 애니메이션하기

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform"]; 
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
animation.duration = 0.4; 

[[self layer] addAnimation:animation forKey:@"transform"]; 

self.transform = CGAffineTransformMakeTranslation(0, 100); 

가능한가요? 어떻게 완료 될까요?

답변

1

원하는 움직임에서 원하는 시간을 계산하지 않는 이유는 무엇입니까? 다음과 같이하십시오 :

CGFloat distanceToTimeFactor = 0.1; 
CGPoint current = self.center; 
CGPoint new = CGPointMake(100,100); 

CGFloat xDist = (new.x - current.x); 
CGFloat yDist = (new.y - current.y); 
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist)); 

CGFloat duration = distance * distanceToTimeFactor; 

그런 다음 해당 기간 동안 애니메이션을 적용하십시오.

+0

감사! 나는이 해결책으로 끝났다. – ErikPerik

관련 문제