这是一个简单的代码形式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”都将执行相同的动画?
感谢。
答案 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];