2013-04-04 99 views
1

我一直在尝试做CALayer动画。但动画后它恢复回来。我发现了几个解决方案,如removedOnCompleteion = YESfill mode = kCAFillModesForwards,但没有人帮助我。这里是代码。需要一点帮助同胞thx。CALayer动画还原

void(^ myblock)(NSDictionary *) = ^(NSDictionary *dict){ 

     NSMutableArray *arrOfPt=  [dict objectForKey:@"Path"]; 

     CGPoint p1 = [[arrOfPt objectAtIndex:0] CGPointValue]; 

     CGPoint cp1 = [[arrOfPt objectAtIndex:1] CGPointValue]; 

//  CGPoint cp1 = [[arrOfPt objectAtIndex:1] CGPointValue]; 
     CGPoint cp2 = [[arrOfPt objectAtIndex:2] CGPointValue]; 
     CGPoint p2 = [[arrOfPt objectAtIndex:3] CGPointValue]; 

     NSMutableArray *arrayTime = [dict objectForKey:@"Time"]; 
     CGFloat time = [[arrayTime objectAtIndex:0] floatValue]; 

     pointerLayer.opacity = 1; 
//  NSArray *oneObjPt = [NSArray arrayWithObjects:[arrOfPt objectAtIndex:0],[arrOfPt lastObject],nil]; 
     //   NSArray *oneObjTime = [NSArray arrayWithObjects:[arrayTime objectAtIndex:0],[arrayTime lastObject],nil]; 
//  NSArray *oneObjTime = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],[NSNumber numberWithFloat:1.0],nil]; 
     CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 

//  [keyFrameAnimation setCalculationMode:kCAAnimationPaced]; 
     keyFrameAnimation.duration = 1; 
     keyFrameAnimation.removedOnCompletion = NO; 
     [keyFrameAnimation setFillMode:kCAFillModeForwards]; 

     CGMutablePathRef fpath = CGPathCreateMutable(); 

     CGPathMoveToPoint(fpath, NULL, p1.x, p1.y); 
     CGPathAddCurveToPoint(fpath, NULL, cp1.x, cp1.y, cp2.x, cp2.y, p2.x, p2.y); 
     keyFrameAnimation.path = fpath; 

     [pointerLayer addAnimation:keyFrameAnimation forKey:@"pos"]; 
     CGPoint newLoc = pointerLayer.position;// this is just to verify the layer's location 

回答

1

我找到了一些解决方案,如removedOnCompleteion = YES和填充模式= kCAFillModesForwards

这些都不是解决办法。

CGPoint newLoc = pointerLayer.position;

这不会有什么好处;添加动画并不会改变位置。动画发生在后面

我不完全确定你在做什么,但它可以帮助你阅读我对Core Animation的解释。动画只是一种幻觉;这是一个与“表示层”一起玩的游戏。它是由层移动到它将在动画后的位置,以添加看起来会使其移动的动画。

我为确保您的核心动漫作品,让你一个公式化的方法,你想去的地方:

http://www.apeth.com/iOSBook/ch17.html#_using_a_cabasicanimation

+0

THX队友,我没有实际工作 – Azerue 2013-04-05 06:18:09

0

我似乎无法重现此 - 授予我用一些测试数据:

CGPoint cp1 = CGPointMake(0, 0); 
CGPoint cp2 = CGPointMake(100, 100); 
CGPoint cp3 = CGPointMake(85, 150); 
CGPoint cp4 = CGPointMake(50, 50); 
CGFloat time = 2.0f; 
CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
keyFrameAnimation.duration = time; 
keyFrameAnimation.removedOnCompletion = NO; 
[keyFrameAnimation setFillMode:kCAFillModeForwards]; 

CGMutablePathRef fpath = CGPathCreateMutable(); 

CGPathMoveToPoint(fpath, NULL, cp1.x, cp1.y); 
CGPathAddCurveToPoint(fpath, NULL, cp2.x, cp2.y, cp3.x, cp3.y, cp4.x, cp4.y); 
keyFrameAnimation.path = fpath; 
[testView.layer addAnimation:keyFrameAnimation forKey:@"pos"]; 
CFRelease(fpath); 

,输出:

http://glassofcocoa.com/code/AnimationTest.mp4

可能贵点的一个阵列中可能是首发位置?