我使用以下代码将标签从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"];
但在这种情况下,在动画结束时,标签会移回原来的位置。如何确保它停留在移动位置。
有没有好的方法可以不使用计时器并自行更改坐标。
答案 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