每次用户做某事时,我都会尝试将 CALayer 移动几个点。我将动画设置为相对缓慢地运行,但是当我在设置动画后设置图层的位置时,隐式动画似乎接管并快速执行动画。这基本上是我的代码的样子:
CGPoint point = CGPointMake(layer.position.x + 30, layer.position.y + 30);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint: layer.position];
animation.toValue = [NSValue valueWithCGPoint: point];
animation.duration = 4;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
[layer addAnimation:animation forKey:@"position"];
layer.position = point;
我尝试删除layer.position = point
导致第一个动画按预期运行的最后一行,但是当我第二次尝试运行动画时,图层跳回到我运行第一个动画之前的图层所在的位置。目前,我能够解决此问题的唯一方法是向实现的动画添加一个委托,animationDidStop
并在动画完成后设置图层的点。但是查看很多其他人的示例代码,这不应该是必需的。有什么我做错了吗?