-1

私は単純な点の動きを見せようとしています。レイヤーを設定し、境界、位置、色を設定してから、CAAnimation を使用して動く様子を表示します

    CALayer *l = [CALayer layer];

    l.bounds = CGRectMake(0,0,20,20);
    l.position = CGPointMake(x,y);
    l.cornerRadius = 10;
    l.backgroundColor = [UIColor blueColor].CGColor;

    [self.theView.layer addSublayer:l];


    CABasicAnimation *anim1 = [CABasicAnimation animationWithKeyPath:@"position"];
    anim1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    CGPoint to = CGPointMake(x+dx, y+dy);
    anim1.fromValue = [l valueForKey:@"position"];
    anim1.toValue = [NSValue valueWithCGPoint:to];
    l.position = to;
    anim1.duration = 3.0;

これを実行すると、2 つの青い円が動いているのが見えます。(x,y) から (x+dx,y+dy) に移動する 1 つの円を見たい。誰かが私が間違っていることを教えてくれますか?

ありがとう

4

1 に答える 1

2

私には1つの円しか表示されませんが、アニメーションを次のようにレイヤーに追加しました(コードサンプルは実行しません)(コードの最後の行の後):

[l addAnimation:anim1 forKey:@"myNumberOneAnimation"];

そのコード行がないと、レイヤーの位置を設定することで暗黙のアニメーションが得られます。ビューに関連付けられていないレイヤーのアニメーション可能なプロパティを変更すると、暗黙的なアニメーションが発生します。一方、レイヤーにアニメーションを追加して位置を明示的にアニメーション化すると、暗黙的なアニメーションの代わりにアニメーションが表示されます。

次のように fillMode を変更することで、開始前と終了後のアニメーションの外観を構成することもできます。

anim1.fillMode = kCAFillModeBoth;

これらの行を追加しても問題が解決しない場合は、コードの別の場所にあります。その場合は、「l」レイヤーのプロパティをアニメーション化または変更しているコードをさらに投稿してください。

于 2012-05-23T16:50:35.337 に答える