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;

发生的情况是我看到图层几乎“跳”到它的最终位置,然后我的动画开始了。我的猜测是“几乎跳”实际上是“位置”的原始隐含动画(持续时间非常短)。我还尝试替换位置而不是 position.y 并尝试替换图层中的整个动作字典(只是添加此动画)。但我总是得到相同的结果。

我将如何做才能有效地只看到图层平移 1 秒?

4

1 回答 1

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:在动画开始之前以进度 1 调用。结果问题是我正在用 . 合成属性(进度)@dynamic。删除它实际上解决了我的问题:-)

于 2012-11-06T00:02:56.090 回答