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 の代わりに position を置き換えてみました。また、レイヤー内のアクション ディクショナリ全体を置き換えてみました (このアニメーションを追加するためだけに)。しかし、私はいつも同じ結果を得ます。

レイヤーが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 に答える