访问属性时执行动画

时间:2012-02-02 18:42:17

标签: core-animation

这是一个简单的代码形式Brad Larson u-tunes课程;)

CABasicAnimation *move = [CABasicAnimation animationWithKeyPath:@"position"];
move.duration = 1.0f;
move.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
move.removedOnCompletion = NO;
move.fillMode = kCAFillModeForwards;

CGPoint currentPosition = l.position;
CGPoint newPosition = CGPointMake(currentPosition.x + 60.0f, currentPosition.y + 60.0f);
move.toValue = [NSValue valueWithCGPoint:newPosition];
[l addAnimation:move forKey:@"position"];
l.position = newPosition;

在最后一行我改变位置以反映图层的最终状态,因为动画没有。 但是当我执行此代码时,动画不会执行,并且图层移动(以1/4秒为单位)到新位置。

有人可以解释我如何正确地为图层的位置设置动画吗?

第二个问题......当我运行此代码时...每次后续访问属性“position”都将执行相同的动画?

感谢。

1 个答案:

答案 0 :(得分:0)

抛弃最后一行l.position = newPosition;。你的动画已经处理好了,通过使用那个属性设置器,你隐含地给出了Core Animation默认的.25秒动作。

此外,不会,您图层位置的后续更改将不会使用您的1秒动画。除了持续时间之外,您使用的属性看起来与默认动画非常相似;一个更快的方法来完成你正在做的事情将是这样的。

CGPoint currentPosition = l.position;
CGPoint newPosition = CGPointMake(currentPosition.x + 60.0f, currentPosition.y + 60.0f);

[CATransaction begin];
    [CATransaction setAnimationDuration:1.0];
    l.position = newPosition;
[CATransaction commit];