如何使用iPhone中的CABasicAnimation在x方向上移动视图或标签

时间:2009-10-12 16:02:56

标签: iphone

我使用以下代码将标签从x方向的一个位置移动到另一个位置

CABasicAnimation *theAnimation; 
    theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
    theAnimation.duration=1;
    theAnimation.repeatCount=1;
    theAnimation.autoreverses=NO;
    theAnimation.fromValue=[NSNumber numberWithFloat:0];
    theAnimation.toValue=[NSNumber numberWithFloat:80];


    [lbl.layer addAnimation:theAnimation forKey:@"animateLayer"];

但在这种情况下,在动画结束时,标签会移回原来的位置。如何确保它停留在移动位置。

有没有好的方法可以不使用计时器并自行更改坐标。

2 个答案:

答案 0 :(得分:14)

动画完成后,它将被删除。这就是为什么它会重新开始。将其添加到动画中:

theAnimation.removedOnCompletion = NO;
theAnimation.fillMode = kCAFillModeForwards;

这将阻止动画被删除,并告诉动画在完成后保持最终状态。

答案 1 :(得分:1)

此处有2项需要更新。表示层和模型。 CABasicAnimation仅更改表示层,并且永远不会更新模型。因此,当动画中的表示层完成时,它会消失,您会看到带有模型值的视图。您只需在动画完成时使用新值更新模型。

[layer setValue:toValue forKeyPath:keyPath];

看一下我写的一个实用程序来帮助完成这个,HMBasicAnimation http://hellomihai.wordpress.com/2014/09/02/hmbasicanimation-utility/

用法:

[HMBasicAnimation doAnimation:myView.layer // layer youre updating
                      toValue:myView.frame.size.width/2 // your value
                     duration:1.5 // duration
                 delaySeconds:1 // animation delay (good for chaining animations
                      keyPath:HMBasicAnimation_TRANSLATION_X]; // what you're changing, several available