Ios 在我已经翻译了一次后,如何才能获得CALayer的翻译位置?

Ios 在我已经翻译了一次后,如何才能获得CALayer的翻译位置?,ios,objective-c,animation,calayer,Ios,Objective C,Animation,Calayer,我只是在已经翻译了一次之后,尝试将图层翻译回其原始位置。我总是可以将转换到的图层位置存储在属性中,但似乎有更好的方法。我正在这样做来翻译我的图层: CABasicAnimation *slide = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; slide.byValue = [NSNumber numberWithFloat:translationValue]; slide.duration = dura

我只是在已经翻译了一次之后,尝试将图层翻译回其原始位置。我总是可以将转换到的图层位置存储在属性中,但似乎有更好的方法。我正在这样做来翻译我的图层:

CABasicAnimation *slide = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
slide.byValue = [NSNumber numberWithFloat:translationValue];
slide.duration = duration;
slide.removedOnCompletion = NO;
slide.fillMode = kCAFillModeForwards;
slide.autoreverses = NO;

[layer addAnimation:slide forKey:KEYPATH_POSITION];
我试着做如下的事情,但这没有动画,它只是显示回原来的位置

CABasicAnimation *slide = [CABasicAnimation animationWithKeyPath:@"position"];
slide.toValue = [layer valueForKey:@"position"];
slide.duration = duration;
slide.removedOnCompletion = NO;
slide.fillMode = kCAFillModeForwards;
slide.autoreverses = NO;

[layer addAnimation:slide forKey:KEYPATH_POSITION];

removedOnCompletion=NO
是您的问题。改为设置模型值,并在动画完成时删除动画可能会有所帮助(removedOnCompletion=NO的重复动画)。很好,我现在更了解这一点。我完全明白为什么你的方式更好。那么,您是否会将原始起点保留在一个属性中?所以我可以把变换设置为那个点,当我想让层向后移动时?如果你使用的是像第一个例子一样的变换,那么你可以简单地把它设置为向后移动的标识变换,我真的不明白。我试着做了如下的事情,但没有成功:CGPoint currentPosition=[[layer valueForKeyPath:KEYPATH_POSITION]CGPointValue];slide.toValue=[NSValue-valueWithCGPoint:currentPosition];