-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;

当我运行它时,我看到两个蓝色圆圈在移动。我想看到一个圆圈从 (x,y) 移动到 (x+dx,y+dy)。有人可以告诉我我做错了什么吗?

谢谢

4

1 回答 1

2

它只为我显示一个圆圈,但我将动画添加到图层(您的代码示例没有这样做),如下所示(在您的最后一行代码之后):

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

如果没有那行代码,您将通过设置图层的位置获得隐式动画。更改与视图无关的图层的动画属性会导致隐式动画。另一方面,当您通过将动画添加到图层来显式地为位置设置动画时,它将显示而不是隐式动画。

您还可以通过更改 fillMode 来配置动画开始之前和结束之后的外观,如下所示:

anim1.fillMode = kCAFillModeBoth;

如果添加这些行不能解决问题,那么它在您的代码中的其他地方。如果是这样,请在您设置动画或更改“l”层属性的位置发布更多代码。

于 2012-05-23T16:50:35.337 回答