Io 为什么我要更换CALayer';s位置隐式动画,它仍然在我自己的动画之前生效?

Io 为什么我要更换CALayer';s位置隐式动画,它仍然在我自己的动画之前生效?,io,core-animation,calayer,caanimation,Io,Core Animation,Calayer,Caanimation,我在做这样的事情: CABasicAnimation* translateA = [CABasicAnimation animation]; translateA.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; translateA.fillMode = kCAFillModeBoth; translateA.duration = 1;

我在做这样的事情:

  CABasicAnimation* translateA = [CABasicAnimation animation];
  translateA.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  translateA.fillMode = kCAFillModeBoth;
  translateA.duration = 1;

  CALayer* nextLayer = <some layer...>
  [nextLayer addAnimation:translateA forKey:@"position.y"];
  newPos = nextLayer.position;
  newPos.y += someDelta;
  nextLayer.position = newPos;
CABasicAnimation*translateA=[CABasicAnimation];
translateA.timingFunction=[CamediaTimingFunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
translateA.fillMode=kCAFillModeBoth;
translateA.duration=1;
CALayer*nextLayer=
[nextLayer addAnimation:translateA forKey:@“position.y”];
newPos=nextLayer.position;
newPos.y+=someDelta;
nextLayer.position=newPos;
发生的事情是,我看到图层几乎“跳”到它的最终位置,然后我的动画开始了。我猜“几乎跳跃”实际上是“位置”的原始隐含动画(持续时间非常短)。我还尝试替换position而不是position.y,还尝试替换层中的整个动作字典(只是为了添加此动画)。但我总是得到同样的结果


我该怎么做才能有效地在1秒钟内看到图层转换?

您能显示更多代码吗?在
drawInContext:

我在自己的图层中有这样一个:

+ (BOOL)needsDisplayForKey:(NSString *)key
{
    if ([key isEqualToString:@"progress"])
        return YES;
    else
        return [super needsDisplayForKey:key];
}
在这样做时:

[self.layer setValue:@1 forKey:@"progress"];
然后:

[self.layer addAnimation:animation forKey:@"progress"];

drawInContext:
在动画开始之前,正在使用progress 1调用。原来问题是我用
@dynamic
合成了属性(progress)。删除它实际上解决了我的问题:-)

您能显示更多代码吗?在
drawInContext:

我在自己的图层中有这样一个:

+ (BOOL)needsDisplayForKey:(NSString *)key
{
    if ([key isEqualToString:@"progress"])
        return YES;
    else
        return [super needsDisplayForKey:key];
}
在这样做时:

[self.layer setValue:@1 forKey:@"progress"];
然后:

[self.layer addAnimation:animation forKey:@"progress"];
drawInContext:
在动画开始之前,正在使用progress 1调用。原来问题是我用
@dynamic
合成了属性(progress)。删除此选项实际上解决了我的问题:-)