2012-08-06 4 views
0
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.33], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:1.0], nil]; 
[anim setKeyTimes:times]; 
NSArray *values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint: CGPointMake(100., 100.)], [NSValue valueWithCGPoint: CGPointMake(100., 200.)], [NSValue valueWithCGPoint: CGPointMake(220., 200.)], [NSValue valueWithCGPoint: CGPointMake(220., 100.)], nil]; 
anim.speed=1.0f; 
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; 
[anim setValues:values]; 
[anim setDuration:6.0]; 
[sublayer addAnimation:anim forKey:@"position"]; 

CALayer가 애니메이션을 마친 후에도 CALayer가 원래 위치로 다시 이동하는 것을 알 수 있습니다. 어떤 일이 일어나지 않도록 방지 할 방법이 있습니까? 어떤 도움을 주셔서 감사합니다.calayer가 원래 위치로 이동하지 못하도록합니다.

답변

2

애니메이션을 추가 한 후 레이어의 위치를 ​​애니메이션의 마지막 위치로 설정해야합니다.

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.33], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:1.0], nil]; 
[anim setKeyTimes:times]; 
NSArray *values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint: CGPointMake(100., 100.)], [NSValue valueWithCGPoint: CGPointMake(100., 200.)], [NSValue valueWithCGPoint: CGPointMake(220., 200.)], [NSValue valueWithCGPoint: CGPointMake(220., 100.)], nil]; 
anim.speed=1.0f; 
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; 
[anim setValues:values]; 
[anim setDuration:6.0]; 
[sublayer addAnimation:anim forKey:@"position"]; 
[sublayer.layer.position = [[values lastObject] CGPointValue];// this will set the position to the final position of the animation, (220., 100.); 
관련 문제